【发布时间】:2019-02-27 02:33:52
【问题描述】:
为什么双引号的转义在这种情况下会丢失?
$ cat foo.txt
This is a \"very good\" text worth AMOUNT dollars
$ cat full_story.txt
This is about money:
STORY
使用以下方法对其进行测试:
VAR=$(cat foo.txt)
TOTAL=$(cat full_story.txt)
echo "$TOTAL" | perl -pe "s/STORY/$VAR/g"
结果:
This is about money:
This is a "very good" text worth AMOUNT dollars
双引号的转义丢失了。我期待:
This is about money:
This is a \"very good\" text worth AMOUNT dollars
我怎样才能保存逃逸?
【问题讨论】:
-
加倍反斜杠或引用
foo.txt中的文本,如"This is .."。 -
@keithpjolley:1) 引用
This is...仍然会删除转义。这也不是我想要的,因为我没有引用那行 2)做双重转义可以解决这个问题,但我不想这样做,因为副本已经有转义 -
@keithpjolley:+1 双重转义虽然有效。我想了解为什么这种方法不起作用
-
这只是用完了我脑海中最后一点点 perl 知识:
echo "$TOTAL" | perl -pe '$v=q{'"$VAR"'};s/STORY/$v/g'。我确信有不同的方法可以更有意义。 -
不要试图从 shell 生成 Perl 代码!你很可能做错了,而且确实你做错了。