保留传递给 perl 包装脚本的引号

保留传递给 perl 包装脚本的引号

我正在编写一个小型 perl 包装器来设置环境变量等,然后调用同名的命令。

./foo.pl -a one -b two -c "1 2 3" -d done

当我输出@ARGV时,1 2 3周围的“”已被删除。有人知道如何让 perl 保留这些引号吗?

答案1

这并不是说 perl 不保留引号,而是 perl 永远无法获取它们。引号只是防止 shell 将文本拆分为多个参数的一种方法。使用反斜杠可以达到相同的效果:

./foo.pl -a one -b two -c 1\ 2\ 3 -d done

在这两种情况下,效果都是字符串 1、空格、2、空格、3。您还可以在不包含空格的其他参数两边加上引号,引号仍然不是传递给程序的参数的一部分。

如果您想将参数传递给 shell,只需在所有参数两边加上引号即可。或者您可以在每个特殊 shell 字符之前添加反斜杠。

答案2

简单地说,添加硬引号:

./foo.pl -a one -b two -c '"1 2 3"' -d done

相关内容