bash - bash 中的 perl : How to call perl on a script saved in a string

标签 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.

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

最佳答案

你的字符串 $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/

相关文章:

linux - bash 命令变量内的变量

bash - 使用 bash 在后台有条件地运行进程

macos - 如何 cd 到脚本回显的目录

linux - 使用 linux 脚本命令

perl - 如何集成 Perl 和 Abyss Web 服务器?

perl - 是否有 `perl` 本身的手册页?

bash - 在另一个 .pdf 文件的每一页末尾添加一个 .pdf 文件(基本上是 .png)

bash : check if ssh key connection is well setup

perl - AnyEvent 计时器问题

linux - 如何在 sh shell 中循环参数