Sie dürfen keine Leerzeichen um Ihr '=' - Zeichen haben.
Wenn Sie schreiben:
STR = "foo"
bash versucht einen Befehl namens STR mit 2 Argumenten auszuführen (die Zeichenfolgen '=' und 'foo')
Wenn Sie schreiben:
STR =foo
bash versucht einen Befehl namens STR mit 1 Argument auszuführen (der String '= foo')
Wenn Sie schreiben:
STR= foo
bash versucht, den Befehl foo auszuführen, wobei STR auf die leere Zeichenfolge in seiner Umgebung gesetzt ist.
Ich bin mir nicht sicher, ob dies zur Klärung beiträgt oder ob es sich lediglich um eine Verschleierung handelt, aber beachten Sie Folgendes:
- Der erste Befehl ist genau äquivalent zu:
STR "=" "foo"
,
- der zweite ist der gleiche wie
STR "=foo"
,
- und der letzte ist gleichbedeutend mit
STR="" foo
.
Der relevante Abschnitt der sh-Sprachspezifikation, Abschnitt 2.9.1, besagt:
Ein "einfacher Befehl" ist eine Folge von optionalen Variablenzuweisungen und -umleitungen in beliebiger Reihenfolge, optional gefolgt von Wörtern und Umleitungen, die von einem Steuerungsoperator beendet werden.
In diesem Zusammenhang ist a word
der Befehl, den bash ausführen wird. Jede Zeichenfolge, die =
(an einer anderen Position als am Anfang der Zeichenfolge) keine Umleitung enthält, ist eine Variablenzuweisung, während jede Zeichenfolge, die keine Umleitung ist und keine enthält, =
ein Befehl ist. In STR = "foo"
, STR
ist nicht eine variable Zuordnung.