我需要在不同的文件上多次执行相同的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.
我在这里做错了什么?我可以用其他方式达到同样的效果吗?
答案 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脚本。