Si ejecuto estos comandos desde un script:
#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
está bien.
Pero si corro:
#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'
Leí en los tutoriales que para sustituir las variables de entorno del shell, debe detenerse y 'citar' la $varname
parte para que no se sustituya directamente, que es lo que hice, y que funciona solo si la variable se define inmediatamente antes.
¿Cómo puedo hacer que sed reconozca a $var
como una variable de entorno tal como se define en el shell?
set -x
en el shell para que el shell haga eco de cada comando justo antes de que los ejecute. Esto puede aclarar mucha confusión. (Además, a menudo uso set -u
para hacer que la desreferenciación de las variables no definidas sea un error difícil. (Ver set -e
también.))