Die Antworten, die Sie bei Stack Exchange gefunden haben, sind richtig und dieses Tutorial ist falsch. Sie können selbst experimentieren oder im Standard nachschlagen . Ein IFS
Nicht-Set entspricht dem Festlegen des Standardwerts für Leerzeichen-Tabulator-Zeilenumbruch, während ein Leerzeichen die Feldaufteilung IFS
effektiv deaktiviert .
Auf der IFS-Seite von Sven Mascheck finden Sie Informationen zu historischen Implementierungen. Ein paar historische Shells mochten es nicht unset IFS
, und eine sehr alte Version von ksh behandelte es wie eine leere, IFS
aber alle modernen Shells und die meisten alten Shells behandeln ein nicht gesetztes IFS
wie den Standardwert.
Sie sollten Ihr Skript nur dann starten, IFS=
wenn Sie die Feldaufteilung deaktivieren möchten (was eine vernünftige Entscheidung sein kann. Beachten Sie jedoch, dass Sie Substitutionen immer noch in doppelte Anführungszeichen setzen müssen, um ein Globbing zu vermeiden, es sei denn, Sie deaktivieren dies auch mit set -f
). Verwenden Sie zum Zurücksetzen des Standardwerts unset IFS
. Es ist fraglich, ob dies am Anfang eines Skripts nützlich ist. Es gibt viele andere schlechte Dinge, wie zum Beispiel einen zwielichtigen PATH
, den der Anrufer tun kann, damit Ihr Skript schief geht.
In diesem Tutorial wird auch zum Zurücksetzen empfohlen PATH
. Dies ist normalerweise ein schlechter Rat. In den meisten Fällen können Sie den richtigen Suchpfad nicht vorhersagen, aber der Benutzer weiß es. Woher wissen Sie, ob fehlerbehaftete Versionen von Dienstprogrammen unter einem alten Unix enthalten sind /usr/local/bin
oder /home/bob/bin
enthalten, in denen die fehlerhaften Versionen fehlerhaft /usr/bin
sind? Möchten Sie wirklich die gesamte Logik einbetten, um herauszufinden, ob Sie /usr/xpg6/bin
vorziehen müssen /bin
? An welcher Position möchten Sie /usr/gnu/bin
? Setzen Sie PATH nur zurück, wenn Ihr Skript auf ein bestimmtes System abzielt.
Ich habe dieses Tutorial nicht gelesen, aber eines habe ich überprüft: Es sagt Ihnen nicht von Anfang an, dass Sie immer doppelte Anführungszeichen um Variablensubstitutionen und Befehlssubstitutionen setzen müssen. Daher halte ich dieses Tutorial nicht für gut.
unset IFS
setzt IFS in bash nicht auf seinen Standardwert zurück, obwohl die Feldaufteilung zurückgesetzt wird.unset IFS
wird nichtIFS
auf den Standardwert zurückgesetzt, sondern deaktiviert. Ein Nicht- SetIFS
hat jedoch den gleichen Effekt wie dasIFS
Setzen auf den Standardwert.