Es funktioniert perfekt in meiner Umgebung. Welches Betriebssystem verwenden Sie und welche Version von Bash?
mrc02_kr
1
@ mrc02_kr Es würde nur funktionieren, wenn $TMPes ??vor dem Ausführen der Zeile ist.
Kusalananda
Antworten:
13
sh -c 'TMP=??; echo $TMP;'
Bei Verwendung von doppelten Anführungszeichen erfolgt die Parametererweiterung, wenn die Befehlszeile erstellt wird, dh die Shell wird nicht angezeigt
TMP=??; echo $TMP;
als Parameter aber
TMP=??; echo ;
if $TMPist in der aufrufenden Shell-Umgebung leer.
Beachten Sie auch, dass Sie??sh -c 'TMP=??; echo "$TMP"'
Stéphane Chazelas
Mir wurde klar, dass ich keine Wertschätzung hinterlassen hatte. Vielen Dank, es hat sehr geholfen: D
Gwangmu Lee
9
sh -c 'TMP=??; echo "$TMP"'
Mit doppelten Anführungszeichen um den sh -cCode wird der $TMPdurch die interaktive Shell erweitert, bevor der sh -cCode ausgeführt wird. Mit einfachen Anführungszeichen $TMPwird innerhalb der shShell erweitert. (Ich habe auch die $TMPvariable Erweiterung für richtig zitiert echo).
Einfache Anführungszeichen schützen eine Zeichenfolge vor variablen Erweiterungen.
Wenn Sie nicht beabsichtigen, das ??Muster innerhalb des sh -cSkripts als Dateinamen-Globbing-Muster zu behandeln , verwenden Sie
$TMP
es??
vor dem Ausführen der Zeile ist.Antworten:
Bei Verwendung von doppelten Anführungszeichen erfolgt die Parametererweiterung, wenn die Befehlszeile erstellt wird, dh die Shell wird nicht angezeigt
als Parameter aber
if
$TMP
ist in der aufrufenden Shell-Umgebung leer.quelle
??
sh -c 'TMP=??; echo "$TMP"'
Mit doppelten Anführungszeichen um den
sh -c
Code wird der$TMP
durch die interaktive Shell erweitert, bevor dersh -c
Code ausgeführt wird. Mit einfachen Anführungszeichen$TMP
wird innerhalb dersh
Shell erweitert. (Ich habe auch die$TMP
variable Erweiterung für richtig zitiertecho
).Einfache Anführungszeichen schützen eine Zeichenfolge vor variablen Erweiterungen.
Wenn Sie nicht beabsichtigen, das
??
Muster innerhalb dessh -c
Skripts als Dateinamen-Globbing-Muster zu behandeln , verwenden Siequelle