Odpowiedzi znalezione na Stack Exchange są prawidłowe i ten samouczek jest nieprawidłowy. Możesz eksperymentować sam lub sprawdzić to w standardzie . Unset IFS
odpowiada ustawieniu domyślnej wartości spacji-tab-nowej linii, a pusty IFS
skutecznie wyłącza dzielenie pól.
Możesz zapoznać się ze stroną Svena Maschecka na IFS na temat historycznych wdrożeń. Kilka historycznych powłok nie podobało się unset IFS
, a bardzo stara wersja ksh traktowała ją jak pustą, IFS
ale wszystkie współczesne powłoki i większość starych powłok traktuje zestaw IFS
jako wartość domyślną.
Nie powinieneś uruchamiać skryptu, IFS=
chyba że chcesz wyłączyć dzielenie pól (co może być rozsądną decyzją - pamiętaj jednak, że nadal musisz umieszczać podwójne cudzysłowy wokół podstawień, aby uniknąć globowania, chyba że też to wyłączysz set -f
). Aby zresetować wartość domyślną, użyj unset IFS
. Można dyskutować, czy jest to przydatne na początku skryptu; istnieje wiele innych złych rzeczy, takich jak podejrzany, PATH
że osoba dzwoniąca może zrobić, aby skrypt nie działał poprawnie .
W tym samouczku zaleca się również resetowanie PATH
. To zwykle zła rada. W większości przypadków nie można przewidzieć prawidłowej ścieżki wyszukiwania, ale użytkownik wie. Skąd wiesz, czy /usr/local/bin
lub /home/bob/bin
zawiera wersje Bug-ustalona mediów na starożytnych UNIX gdzie te w /usr/bin
to buggy? Czy naprawdę chcesz osadzić całą logikę, aby dowiedzieć się, czy /usr/xpg6/bin
wyprzedzić /bin
? W jakiej pozycji chcesz /usr/gnu/bin
? Nie resetuj zmiennej PATH, chyba że skrypt jest ukierunkowany na określony system.
Nie przeczytałem tego samouczka, ale sprawdziłem jedną rzecz: od samego początku nie mówi ci, aby zawsze wstawiać podwójne cudzysłowy wokół podstawień zmiennych i podstawień poleceń. Nie sądzę więc, aby ten samouczek był dobry.
unset IFS
nie resetuje IFS do domyślnej wartości w bash, chociaż resetuje podział pola.unset IFS
nie resetuje sięIFS
do wartości domyślnej, resetuje ją. Ale rozbrojenieIFS
ma taki sam efekt jakIFS
ustawienie na wartość domyślną.