使用Perl Unix命令转义序列

时间:2012-07-16 18:37:27

标签: linux perl git unix escaping

我正在尝试从perl

中执行以下unix命令
`git log --pretty=format:%H | grep $id | wc -l`;

我不断收到错误

sh: -c : syntax error near unexpected token '|'
sh -c : '| wc -l'

如何解决此错误

2 个答案:

答案 0 :(得分:5)

问题是123<NEWLINE>中有123而不是$id,因此您将以下内容传递给shell:

git log --pretty=format:%H | grep 123
 | wc -l

而不是

git log --pretty=format:%H | grep 123 | wc -l

将值修复为$id。最好的方法可能是通过chomp

答案 1 :(得分:1)

如果使用Perl子例程而不是外部Unix命令实现某些功能,则可能会有更强大的脚本。

使用反引用对于快速脚本很有用,但它本身就很脆弱,因为你会遇到为运行脚本的用户配置的任何Unix shell的全部功能和怪异(具有通配符扩展,输入/输出重定向) ,管道等)。这实际上适用于任何编程语言,并且大多数语言(包括perl)都有更安全的方法来运行外部命令而不使用shell。但是Perl创建的原因之一是能够在一种编程语言下结合一系列Unix命令的文本处理能力。