在shell中使用perl -e命令时的报价问题

时间:2019-02-12 11:50:31

标签: linux shell perl single-quotes

带双引号

以下命令

$ cat ./multi_meta | jq .Partitions[].DocCount | perl -lne "$x += $_; END{ print $x;}"

给我一​​个语法错误:

syntax error at -e line 1, near "+="
Execution of -e aborted due to compilation errors.

单引号

我得到正确的结果

$ cat ./multi_meta | jq .Partitions[].DocCount | perl -lne '$x += $_; END{ print $x;}'

为什么?

2 个答案:

答案 0 :(得分:2)

由于用双引号引起来,所以整个字符串在Perl编译器看到代码之前通过外壳程序的变量扩展机制传递。而且由于您没有名为$x$_的shell变量,因此Perl编译器会看到以下内容:

+= ; END{ print ;}

使用单引号将防止Perl变量扩展,直到Perl编译器可以看到它们为止。

答案 1 :(得分:0)

我认为问题在于您的shell扩展了$ x,因为它是一个shell变量而不是perl变量,解决方案应该像这样\ $转义$。