我需要对不同的文件多次执行相同的 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.
我在这里做错了什么?我可以通过其他方式达到同样的效果吗?
最佳答案
你的字符串 $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
防止 Perl 脚本被 shell 解释。
关于bash - bash 中的 perl : How to call perl on a script saved in a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765610/