Der andere Grund, den noch niemand erwähnt hat, betrifft die Optionsverarbeitung. Wenn Sie schreiben:
if [ "$1" = "abc" ]; then ...
und $ 1 hat den Wert '-n', die Syntax des Testbefehls ist mehrdeutig; Es ist nicht klar, was Sie getestet haben. Das 'x' an der Vorderseite verhindert, dass ein führender Armaturenbrett Probleme verursacht.
Sie müssen sich wirklich alte Muscheln ansehen, um eine zu finden, bei der der Testbefehl keine Unterstützung für -n
oder hat -z
. Der test
Befehl Version 7 (1978) enthielt sie. Es ist nicht ganz irrelevant - einige UNIX-Inhalte der Version 6 sind in BSD entkommen, aber heutzutage ist es äußerst schwierig, etwas zu finden, das im aktuellen Gebrauch so alt ist.
Es ist gefährlich, keine doppelten Anführungszeichen um Werte zu verwenden, wie eine Reihe anderer Personen betonten. In der Tat, wenn die Möglichkeit besteht, dass Dateinamen Leerzeichen enthalten (MacOS X und Windows unterstützen dies in gewissem Maße, und Unix hat dies immer unterstützt, obwohl Tools wiexargs
erschweren Sie es), dann sollten Sie Dateinamen jedes Mal in doppelte Anführungszeichen setzen, wenn Sie sie auch verwenden. Wenn Sie nicht für den Wert verantwortlich sind (z. B. während der Optionsbehandlung und die Variable beim Start auf "Nein" und beim Einfügen eines Flags in die Befehlszeile auf "Ja" setzen), ist es nicht sicher, nicht zitierte Formen von Variablen zu verwenden bis Sie sie als sicher erwiesen haben - und Sie können es genauso gut die ganze Zeit für viele Zwecke tun. Oder dokumentieren Sie, dass Ihre Skripte schrecklich fehlschlagen, wenn Benutzer versuchen, Dateien mit Leerzeichen in den Namen zu verarbeiten. (Und es gibt noch andere Charaktere, über die man sich Sorgen machen muss - Backticks könnten zum Beispiel auch ziemlich böse sein.)
"x$Variable"
. Diese Frage ist ein Duplikat dieser Frage.