Wenn ich diese Befehle über ein Skript ausführe:
#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
es ist in Ordnung.
Aber wenn ich renne:
#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'
Ich habe in Tutorials gelesen, dass Sie zum Ersetzen von Umgebungsvariablen aus der Shell den $varname
Teil stoppen und "aus dem Anführungszeichen" setzen müssen, damit er nicht direkt ersetzt wird. Dies habe ich getan und funktioniert nur, wenn die Variable unmittelbar zuvor definiert wurde.
Wie kann ich sed dazu bringen, eine $var
Umgebungsvariable zu erkennen , wie sie in der Shell definiert ist?
set -x
in der Shell, damit die Shell jeden Befehl unmittelbar vor der Ausführung wiedergibt. Dies kann viel Verwirrung beseitigen. (Außerdem verwende ich oft set -u
, um das De-Referenzieren von nicht gesetzten Variablen zu einem schweren Fehler zu machen. (Siehe set -e
auch.))