Ich versuche, herauszufinden, wie sich die onelinerEine Zeile Einstellung Umgebungsvariable und Befehl ausführen, bekam diffferent Ergebnisse in sh und bash
var=value command
tatsächlich in sh arbeitet. Ich erwarte, dass variable var
an die Umgebung von command
weitergegeben werden, sollte aber nicht in der aktuellen Umgebung vorhanden ist (bitte nicht Hinweis am Ende weglassen!)
Zuerst versuchen sie es in bash
#bash
$ var= #just to be sure it's empty
$ var=value echo something
. something
$ echo "$var"
.
$ var=value set something
$ echo "$var"
.
Für jetzt funktioniert es wie erwartet. Aber wenn wir den gleichen Eingang an sh und erneut eingeben zu gehen, wird es so sein:
#sh
$ var=
$ var=value echo something
. something
$ echo "$var"
.
$ var=value set something
$ echo "$var"
. value
Und die letzte unterscheidet. Ist set
Befehl eine Art Spezialfall für SH? Warum wurde die Variable var
in unserer aktuellen Umgebung gespeichert?
Haftungsausschluss: Ich weiß, dass echo
und set
Schale sind eingebaut in die und somit Umgebungsvariablen wir sie durch var=value command
passieren verschwendet werden, aber meine Frage ist nur über die Syntax. Ich meine, sie sollten verschwendet worden sein, aber in sh, wenn set
eingegeben wurde, wurde die Variable irgendwie in die aktuelle Umgebung übergeben.
Ausgezeichnete Antwort. Nur neugierig: Können Sie sich einen Grund vorstellen, warum dieses Sonderfallverhalten eine gute Idee ist? Das gleiche Ergebnis könnte ohne einen speziellen Fall über 'var = value; etwas setzen. – John1024
Ich bin nicht wirklich sicher, warum sie die Shell beeinflussen müssen. Ich möchte nur darauf hinweisen, dass die als spezielle Einbauten klassifizierten Befehle eingebaut sein müssen, da sie Befehle sind, die sich auf die Shell auswirken und nicht nur optional für die Effizienz eingebaut sind. Daher ist es nicht wirklich sinnvoll, wenn Zuweisungen temporär sind, da niemals ein separater Befehl ausgeführt wird. – chepner