我想使用 shell 变量替换字符串。
\ntoday =`date '+%Y%m%d'`\n\nperl -p -i -e 's/file"20221212"/file="${today}"/g' \nRun Code Online (Sandbox Code Playgroud)\n期望是file="20221215"。\n但失败了,结果是file=""。
如何逃脱这种情况\xef\xbc\x9f
\n你的问题是 shell 引用。使用单引号 ,'来分隔 Perl 代码会禁用所有变量扩展。您需要使用双引号 ,"来进行变量扩展。
使用不带任何 Perl 的 shell 来说明问题
today=`date '+%Y%m%d'`
echo 'today is $today'
Run Code Online (Sandbox Code Playgroud)
将输出这个——没有扩展$today
today is $today
Run Code Online (Sandbox Code Playgroud)
现在用双引号
today=`date '+%Y%m%d'`
echo "today is $today"
Run Code Online (Sandbox Code Playgroud)
输出此 --$today已扩展。
today is 20221215
Run Code Online (Sandbox Code Playgroud)
将其应用到您的代码中(我删除了该-i选项以便更容易查看结果)并使用以下命令转义了 perl 代码中的所有双引号\"
echo 'file"20221212"' >input.txt
perl -p -e "s/file\"20221212\"/file=\"${today}\"/g" input.txt
Run Code Online (Sandbox Code Playgroud)
给出
file="20221215"
Run Code Online (Sandbox Code Playgroud)