bash 中的 perl:如何对保存在字符串中的脚本调用 perl

perl inside bash: How to call perl on a script saved in a string

我需要对不同的文件多次执行同一个 perl 脚本。

为了简化这个过程,我尝试将 perl 脚本保存为 bash 字符串, 并通过字符串调用 perl,如以下代码的 "doesn't work" 部分所示:

#!/bin/sh

# works
perl -e 'print 1;'

# doesn't work
S="'print 1;'"
perl -e $S
perl -e $S

我得到以下输出:

1Can't find string terminator "'" anywhere before EOF at -e line 1.
Can't find string terminator "'" anywhere before EOF at -e line 1.

我在这里做错了什么?我可以通过其他方式达到同样的效果吗?

您的字符串中的引号太多 $S:

#!/bin/sh

# works
perl -e 'print 1;'

# also works
S='print 1;'    
perl -e "$S"

我还在 "$S" 周围添加了一些双引号,以防止出现分词问题。

另一种选择是使用 -x 切换到 Perl:

#!/bin/sh

perl -x "[=11=]"

echo <<EOF >/dev/null
#!/usr/bin/env perl
my $a=5;
print "$a\n";
__END__
EOF

echo 'something else'

[=15=] 是当前脚本的名称,因此 Perl 查找以 #! 开始并包含 perl 的第一行,并将 __END__ 之前的所有内容解释为一个 Perl 脚本。 echo >/dev/null 防止 Perl 脚本被 shell.

解释