Проблема в том, что perl
анализирует экранирование обратной косой черты в явной строке замены (не в переменной perl
), и, следовательно, \"
анализируется в "
.Например:
$ echo "A STORY" | perl -pe 's/STORY/\"Hello\"/'
A "Hello"
(Обратите внимание, что переменная Bash $VAR
становится не perl
переменной $VAR
, а скорее константной строкой.) Таким образом, вы должны избегать обратной косой черты, как это вконстантная строка:
$ echo "A STORY" | perl -pe 's/STORY/\\"Hello\\"/'
A \"Hello\"
Вы можете обойти эту проблему, передав переменную Bash $VAR
в perl
переменную $VAR
, используя переключатель -s
в perl
как это:
echo "$TOTAL" | perl -spe 's/STORY/$VAR/g' -- -VAR="$VAR"
Ouput :
This is about money:
This is a \"very good\" text worth AMOUNT dollars
Объяснение:
- -s включает синтаксический анализ переключателей, определенных пользователем, в командной строке
perl
.Любой найденный там переключатель удаляется из @ARGV
и устанавливает соответствующую переменную в программе Perl.