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

时间:2015-01-04 12:41:20

标签: bash perl sh

我需要在不同的文件上多次执行相同的perl脚本。

为了简化这个过程,我试图将perl脚本保存为bash字符串, 并在字符串上调用perl,就像在"不工作"以下代码的一部分:

#!/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.

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

1 个答案:

答案 0 :(得分:9)

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

#!/bin/sh

# works
perl -e 'print 1;'

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

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

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

#!/bin/sh

perl -x "$0"

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

echo 'something else'

$0是当前脚本的名称,因此Perl会查找以#!开头并包含perl的第一行,并将所有内容解释为__END__作为Perl脚本。 echo >/dev/null阻止shell解释Perl脚本。