Mir wurde gesagt, dass die Leerzeichen in bash
oder in anderen Shell-Skripten wichtig sind, und ich sollte die Existenz von Leerzeichen nur ändern, wenn ich weiß, was ich tue. Mit "Ändern der Existenz" meine ich entweder das Einfügen eines Leerzeichens zwischen zwei Nicht-Leerzeichen oder das Entfernen eines Leerzeichens zwischen zwei Nicht-Leerzeichen, z. B. Ändern var="$val"
in var ="$val"
oder umgekehrt. Ich will fragen
Gibt es Fälle, in denen die Verwendung eines einzelnen Leerzeichens oder mehrerer aufeinanderfolgender Leerzeichen in einem Shell-Skript einen Unterschied macht? .
(Natürlich macht das Einfügen / Löschen eines Leerzeichens in Anführungszeichen einen Unterschied, z. B. das Ändern von echo "a b"
nach echo "a b"
oder umgekehrt. Ich suche nach Beispielen, die von diesem trivialen Beispiel abweichen .)
Ich bin auf diese Frage gestoßen, aber es geht um das Hinzufügen und Entfernen von Leerzeichen zwischen zwei Nicht-Leerzeichen, für die ich viele Beispiele kenne, die einen Unterschied machen würden.
Jede Hilfe wäre dankbar. Fügen Sie nach Möglichkeit weitere Sorten von Muscheln hinzu.
quelle
echo
Befehl mit so viel Whitespace zwischen dem Befehl und dem Argument erfolgreich ausgeführt.Dies ist wahrscheinlich Betrug, aber das:
unterscheidet sich von diesem:
obwohl die Leerzeichen nicht in Anführungszeichen stehen. ;-)
Noch verwirrender ist dies:
unterscheidet sich von diesem:
obwohl sie identisch aussehen !
quelle
Wenn wir nicht über die Leerzeichen (sprechen
U+0020
) , aber jeder Leerzeichen (U+0020
,\n
,\t
, etc.), dann einen bestimmten Fall meiner Meinung nach kommen: Hier-Dokumente.Dieser Code (mit Leerzeichen):
Druckt:
Aber dieser Code (mit Tabulatoren):
Druckt:
Das liegt daran ( wie POSIX angibt ):
quelle
<<-
Betreiber nicht gekannt . Vielen Dank.Dies wirkt sich auch beim Schreiben von Zuweisungsanweisungen aus. Zum Beispiel, wenn ich sage
FOO=xyz
, dass eine Umgebungsvariable mit dem NamenFOO
value erstellt wirdxyz
, aber wenn ich die Gleichheit mit einem Leerzeichen trenne, wird angenommen, dass ich ein ProgrammFOO
mit dem Namen arg aufrufe=xyz
. Es ist also wichtig, wenn es um bestimmte Syntax geht.quelle
FOO=xyz
normalerweise eine interne Shell-Variable, aber keine Umgebungsvariable. Sie benötigenset -a
oderexport FOO=xyz
dafür (dh Sie machen es zu einem Teil der Umgebung von Nicht-Subshell-Subprozessen).