Was ist der Unterschied zwischen den unten angegebenen Variablenzuordnungen?
var=23
var =23
var= 23
var = 23
Gibt es einen Unterschied im Raum um den Zuweisungsoperator?
shell
variable
assignment
ajay
quelle
quelle
var
dannvar =23
würde=23
an var übergeben werden, undvar = 23
würde=
und23
an var übergeben. Oder, wenn Sie rief einen Befehl habenvar=
dannvar= 23
passieren würde23
auf den Befehlvar=
.bash
, was genau dasselbe macht wiesh
in allen vier Fällen.Antworten:
Das hängt sehr von der Schale ab. Wenn wir uns nur die 4 Hauptschalenfamilien (Bourne, csh, rc, fish) ansehen:
Bourne Familie
Das ist die Bourne - Shell und alle seine Varianten und
ksh
,bash
,ash
/dash
,zsh
,yash
.var=23
: das ist die korrekte Syntax für die Variablenzuweisung: ein Wort, das aus nicht zitierten Buchstaben, Ziffern oder Unterstrichen besteht, gefolgt von einem nicht zitierten Wort,=
das vor einem Befehlsargument steht (hier ist es für sich allein)var =23
, dervar
Befehl mit=23
dem Argument as (außerzsh
wenn=something
es sich um einen speziellen Operator handelt, der auf den Pfad dessomething
Befehls erweitert wird. Hier wird wahrscheinlich ein Fehler angezeigt, da23
es sich wahrscheinlich nicht um einen gültigen Befehlsnamen handelt).var= 23
: eine Zuweisung,var=
gefolgt von einem Befehlsnamen23
. Das soll23
mitvar=
übergeben an seine Umgebung (var
Umgebungsvariable mit einem leeren Wert) ausgeführt werden.var = 23
,var
Gebiete mit=
und23
als Argument. Versuchen Sie esecho = 23
zum Beispiel mit.Csh Familie
csh
undtcsh
. Variablenzuweisungen gibt es mit derset var = value
Syntax für skalare Variablen,set var = (a b)
für Arrays,setenv var value
für Umgebungsvariablen,@ var=1+1
für Zuweisungen und für die arithmetische Auswertung.So:
var=23
ruft nur denvar=23
Befehl auf.var =23
ruft denvar
Befehl mit=23
als Argument auf.var= 23
ruft denvar=
Befehl mit23
als Argument aufvar = 23
ruft denvar
Befehl mit=
und23
als Argumente auf.RC Familie
Das ist
rc
,es
undakanga
. In diesen Shells sind Variablen Arrays und Zuweisungen sind mitvar = (foo bar)
, wobeivar = foo
sie kurz fürvar = (foo)
(ein Array mit einemfoo
Element) undvar =
kurz fürvar = ()
(Array ohne Element, Verwendungvar = ''
für ein Array mit einem leeren Element) sind.In jedem Fall sind Leerzeichen (Leerzeichen oder Tabulatoren)
=
zulässig und optional. In diesen Shells sind diese 4 Befehle äquivalent und äquivalentvar = (23)
, um ein Array mit einem Element zuzuweisen23
.Fisch
In
fish
ist die Variablenzuweisungssyntaxset var value1 value2
.rc
Variablen sind wie in Arrays.Das Verhalten ist also dasselbe wie bei
csh
, mit der Ausnahme, dassfish
Sie keinen Befehl mit einem=
im Namen ausführen können . Wenn Sie ein solcher Befehl haben, müssen Sie es über aufrufensh
zum Beispiel:sh -c 'exec weird===cmd'
.Also alle
var=23
undvar= 23
geben Ihnen einen Fehler,var =23
rufen denvar
Befehl mit=23
als Argument auf undvar = 23
rufen denvar
Befehl mit=
und23
als Argument auf.quelle
var=23
weist der Variablen 23 zuvar
.var =23
versucht, Befehl (oder Alias oder Funktion)var
mit Argument auszuführen=23
var = 23
ebenso aber Argumente=
und23
var= 23
Setzt dievar
Umgebungsvariable auf eine leere Zeichenfolge und führt dann den Befehl aus23
Ja, Shell ist als Programmiersprache komisch. Aber es ist perfekt als Shell für die interaktive Verwendung, bei der Leerzeichen Befehle und Argumente trennen. Die meisten "Sonderzeichen" (
=
in diesem Fall) haben nur an bestimmten Stellen eine besondere Bedeutung, um den Befehlen fast beliebige Argumente zu geben. Siehe obige Interpretationen.quelle
var=23
ist die korrekte Syntax zum Zuweisen von Werten zu einer Variablen.var =23
wird als Befehlvar
mit=23
Option / Argument für Befehl betrachtetvar
(obwohl korrekte / Standardsyntax für Argument / Option-option
oder ist--option
)var= 23
will weist nichts zu,var
da Leerzeichen den Zuweisungsprozess unterbrechen und23
als ein weiterer Befehl betrachtet werden. Die Problemumgehung istvar=\ 23
odervar=' 23'
zum Speichern von Leerraum.var = 23
hat einen ähnlichen Effekt wie im zweiten Fall.Tatsächlich wird diese Art der Nutzung des umliegenden Raums
=
normalerweise im Testzustand verwendet[[ ]]
. Beispiel für Bash:Und schließlich
=
hängt das Verhalten des Leerraums von Ihrer Shell und den Programmiersprachen ab.quelle