Odpowiedzi znalezione na Stack Exchange są prawidłowe i ten samouczek jest nieprawidłowy. Możesz eksperymentować sam lub sprawdzić to w standardzie . Unset IFSodpowiada ustawieniu domyślnej wartości spacji-tab-nowej linii, a pusty IFSskutecznie 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ą, IFSale wszystkie współczesne powłoki i większość starych powłok traktuje zestaw IFSjako 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/binlub /home/bob/binzawiera wersje Bug-ustalona mediów na starożytnych UNIX gdzie te w /usr/binto buggy? Czy naprawdę chcesz osadzić całą logikę, aby dowiedzieć się, czy /usr/xpg6/binwyprzedzić /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 IFSnie resetuje IFS do domyślnej wartości w bash, chociaż resetuje podział pola.