bash -c “v = Wert; echo $ v ”zeigt nichts an

Antworten:

18

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 $vtatsächlich in der aufrufenden Shell statt, nicht in der aufgerufenen Shell. Die Deklaration v=valuefindet 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
heemayl
quelle
1

Bei doppelten Anführungszeichen $vwird durch die interaktive Shell ersetzt. Verwenden Sie einfache Anführungszeichen:

$ bash -c 'v=value;echo $v'
value

quelle