Ausführen eines Befehls auf einem Befehlszeilenbildschirm:
bash -c "v=value; echo $v"
zeigt nichts an. Es ist in Ordnung? Wie kann ich einer Variablen innerhalb dieser Art der Ausführung einen Wert zuweisen?
Ausführen eines Befehls auf einem Befehlszeilenbildschirm:
bash -c "v=value; echo $v"
zeigt nichts an. Es ist in Ordnung? Wie kann ich einer Variablen innerhalb dieser Art der Ausführung einen Wert zuweisen?
Antworten:
Hierbei handelt es sich um zwei Muscheln:
Die aufrufende Shell, die interaktive Shell, von der aus Sie diese ausführen
Die nicht angemeldete, nicht interaktive Shell, die von erzeugt wird bash -c
Das Problem ist nun, dass die Variablen in doppelten Anführungszeichen auf ihre jeweiligen Werte erweitert werden. Dies gilt für jede Shell.
Da Sie also doppelte Anführungszeichen verwendet haben, findet die Variablenerweiterung $v
tatsächlich in der aufrufenden Shell statt, nicht in der aufgerufenen Shell. Die Deklaration v=value
findet jedoch auf der so genannten nicht interaktiven Shell statt.
Insgesamt haben Sie also die Variable in der aufgerufenen Shell definiert und (vorher) in der aufrufenden Shell erweitert. Da die Wertvariable in der aufrufenden Shell nicht gesetzt ist, wird in der Ausgabe nichts angezeigt.
Jetzt, damit die Variablendefinition und Expansion in der erzeugten Schale zu nehmen, einfache Anführungszeichen verwenden oder entkommen $
:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
Bei doppelten Anführungszeichen $v
wird durch die interaktive Shell ersetzt. Verwenden Sie einfache Anführungszeichen:
$ bash -c 'v=value;echo $v'
value