Ich glaube, ich habe einen massiven Brainfart. Ich würde erwarten
env foo=bar echo $foo
... zum Drucken bar
, aber ich bekomme stattdessen eine leere Zeile. Wat.
Das gleiche passiert, wenn ich die Bash-Syntax verwende:
foo=bar echo $foo
Ich glaube, ich habe einen massiven Brainfart. Ich würde erwarten
env foo=bar echo $foo
... zum Drucken bar
, aber ich bekomme stattdessen eine leere Zeile. Wat.
Das gleiche passiert, wenn ich die Bash-Syntax verwende:
foo=bar echo $foo
Eine ähnliche Frage wurde kürzlich beantwortet : Die Symbole werden in der Zeile ausgewertet, bevor das Symbol in dieser Zeile definiert wird, sodass die Definition und Verwendung der Symbole zum Trennen von Zeilen aufgeteilt werden muss.
Auf Aufforderung durch einen Kommentar hätten Sie dies tun können:
foo=bar bash -c 'echo $foo'
Dieser weist zuerst einen Wert zu foo
und übergibt diesen als Umgebungsvariable an einen neuen Prozess, wo er gedruckt werden kann.
Weitere Informationen finden Sie in der POSIX Shell Command Language Token-Erkennung .
Nach dem Kommentar von @mikeserv :
Die Shell liest ihre Eingabe in Zeilen aus einer Datei, von einem Terminal bei einer interaktiven Shell oder von einer Zeichenfolge bei sh-c oder system ().
Sobald ein Token abgegrenzt ist, wird es gemäß den Anforderungen der Grammatik in der Shell-Grammatik kategorisiert.
env foo=bar bash -c 'echo $foo'
@username...comment
, wird der von Ihnen angegebene Benutzer eine kleine Nachricht erhalten, die ihn darüber informiert, dass Sie mit ihm gesprochen haben. Nun, sie werden, wenn es Thread-relevant ist.luit.c
ich mir das angeschaut und ich denke, ich kann es einfach ändernsetup_io(){ ... ;fnctl(0, [GS]ETFL, 0);...}
, um es2
für das erste Argument zu tun . Nun, ich denke, diecopyTermios()
undsetRawTermios()
Funktionen müssen möglicherweise auch ein wenig modifiziert werden, aber es sollte einfach sein, denke ich. Dasrc = (return)
für jede Zeile scheint seltsam - aber ich bin auch kein C-Programmierer. Ist das dein Ding oder wurde das geerbt? und wenn sich Ihr Kommentar auf Leerzeichen bezieht, sind"${set_null_var:=new val and $(echo other stuff)}"
Sie mit allem größtenteils sicher. Einige Muscheln machen seltsame Sachen mit}
.