Perl 字符串替换为反向引用值和 shell 变量

Perl string replace with backreferenced values and shell variables

比方说 'pm.max_children = 8' 文件 '/usr/local/etc/php-fpm.d/www.conf' 下面的结果应该是 40 但 $1 被忽略了。

aaa=5
perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * $aaa)/ge" /usr/local/etc/php-fpm.d/www.conf

但奇怪的是以下是有效的,以防 $aaa 不是变量。

perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * 3)/ge" /usr/local/etc/php-fpm.d/www.conf

</code> 的含义在 shell 和 Perl 中是不同的。</p> <p>在shell中表示第一个位置参数。由于双引号扩展变量,双引号中的 <code> 也表示第一个位置参数。

在Perl中,</code>表示第一个被正则表达式匹配的捕获组。</p> <p>但是,如果你在 shell 级别上用双引号括起 <code>,Perl 永远不会看到它:shell 将 </code> 扩展为第一个位置参数,并且将扩展后的字符串发送到 Perl。</p> <p>您可以在 Perl 中使用 <code>%ENV 散列来引用环境变量:

aaa=5 perl -i.bak -pe 's/pm.max_children\s*=\s*\K([0-9]+)/( * $ENV{aaa})/ge' /usr/local/etc/php-fpm.d/www.conf