以下命令
$ 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;}'
为什么?
答案 0 :(得分:2)
由于用双引号引起来,所以整个字符串在Perl编译器看到代码之前通过外壳程序的变量扩展机制传递。而且由于您没有名为$x
或$_
的shell变量,因此Perl编译器会看到以下内容:
+= ; END{ print ;}
使用单引号将防止Perl变量扩展,直到Perl编译器可以看到它们为止。
答案 1 :(得分:0)
我认为问题在于您的shell扩展了$ x,因为它是一个shell变量而不是perl变量,解决方案应该像这样\ $转义$。