Якщо я запускаю ці команди зі сценарію:
#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
це прекрасно.
Але, якщо я біжу:
#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'
У навчальних посібниках я читав, що для заміни змінних оточуючих середовищ з оболонки вам потрібно зупинитись, і "випробовувати" $varname
частину, щоб вона не була заміщена безпосередньо, що я і зробив, і яка працює лише у тому випадку, якщо змінна визначена безпосередньо перед цим.
Як я можу змусити sed розпізнати $var
змінну середовища, як це визначено в оболонці?
set -x
в оболонці, щоб змусити оболонку повторювати кожну команду безпосередньо перед їх виконанням. Це може усунути велику плутанину. (Крім того, я часто використовую, set -u
щоб зробити set -e