如何在 Perl 命令中扩展 shell 变量

92r*_*W4m 2 shell perl

我想使用 shell 变量替换字符串。

\n
today =`date '+%Y%m%d'`\n\nperl -p -i -e 's/file"20221212"/file="${today}"/g' \n
Run Code Online (Sandbox Code Playgroud)\n

期望是file="20221215"。\n但失败了,结果是file=""

\n

如何逃脱这种情况\xef\xbc\x9f

\n

pmq*_*mqs 5

你的问题是 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)