Мне удалось получить рабочее решение, частично основанное на кусочках ответов других людей:
app_name='../../path/to/myapp'
perl -pe "\$r = q/${app_name//\//\\/}/; s/APP_NAME/\$r/g" <<<'APP_NAME'
Это создает переменную perl $r
из результата расширения параметра оболочки:
${app_name//\//\\/}
${ # open parameter expansion
app_name # variable name
// # start global substitution
\/ # match / (backslash-escaped to avoid being interpreted as delimiter)
/ # delimiter
\\/ # replace with \/ (literal backslash needs to be escaped)
} # close parameter expansion
Вся эта работа необходима для предотвращения того, чтобы косые черты внутри переменной обрабатывались как синтаксис perl, что в противном случае закрыло бы кавычки q//
вокруг строки.
В заменяющей части используйте переменную $r
($
экранирован, чтобы не рассматривать его как переменную оболочки в двойных кавычках).
Тестирование:
$ app_name='../../path/to/myapp'
$ perl -pe "\$r = q/${app_name//\//\\/}/; s/APP_NAME/\$r/g" <<<'APP_NAME'
../../path/to/myapp