Hinweis: Es gibt viele Fragen zum Testen einer einzelnen Shell-Variablen auf dieser Site. In dieser Frage wird ein Skript für eine undefinierte Variable getestet.Wie kann ich bash behandeln undefinierte Variablen als Fehler?
Sie können eine undefinierte Variable in bash verwenden, ohne einen Fehler bei der Ausführung zu sehen:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
Ich habe dies sehr fehleranfällig gefunden. Wenn ich den Namen einer Variablen in einem großen Skript ändern oder diese Variable entfernen möchte, verursachen alle vorherigen veralteten Referenzen Fehler im Skript. Manchmal ist dies nicht offensichtlich zu debuggen oder Sie finden heraus, wenn es zu spät ist.
Warum ist das erlaubt? Gibt es eine Möglichkeit, undefinierte Variablen zu kennzeichnen?
Die "Warum" gehen auf die Kompatibilität mit Shells der 1970er Jahre zurück. Wenn Sie sich für Best Practices interessieren, im Gegensatz zu history, static checking - wie bei http://shellcheck.net/, das auch als Download verfügbar ist [als eigenständiges Tool] (https://github.com/koalaman/shellcheck) - ist dein Freund hier. –
Ehrlich gesagt, wird die Erweiterung von undefinierten Variablen fehlerhaft viele gängige Idiome brechen. '[[$ var]] & {echo" Etwas mit $ var machen "; } 'wird zum Beispiel mit' set -u' brechen: Im Gegensatz zu 'set -e' (das nur Fehler macht, die nicht geprüft oder als Bedingung in Fehler verwendet werden), macht' set -u' * jeden * Verweis auf eine undefinierte Variable ein Fehler. –
(Übrigens - All-Caps-Variablennamen sind im Space von POSIX für Umgebungsvariablen mit der Bedeutung der Shell oder des Betriebssystems definiert; der Namespace von Variablen mit mindestens einem Kleinbuchstaben ist für die Anwendung reserviert für alle Shell-Variablen, im Gegensatz zu nur den Umgebungsvariablen, da eine Shell-Variable einen Namen mit einer Umgebungsvariablen teilt, die diese überschreibt. –