【发布时间】:2019-08-18 15:49:31
【问题描述】:
为了启发我,我想了解如何在以下 perl oneliner 中的 system 命令中转义引号:
$ ls -p | grep -v / | perl -lane 'system("echo \"$_\"");'
不使用\" 转义序列,如下所示:https://stackoverflow.com/a/1250279/3367247
(显然这个命令没有任何用处;它只是打印包含空格的文件名。但它可以简洁地解释我的问题。)
我尝试了以下方法(请原谅图片,但我发现突出显示最容易解读引用):
代码:$ ls -p | grep -v / | perl -lane 'system("echo ''"''$_''"''");'
代码:$ ls -p | grep -v / | perl -lane 'system('"'"'echo "$_"'"'"');'
这些都不起作用。有没有办法以链接答案的方式实现这一点?
编辑:我需要在 echo 命令中的 $_ 周围加上双引号,因为 $_ 中的字符串包含 括号,而不是因为它包含空格,就像我最初想的那样。
【问题讨论】:
-
perl -lane 'system(qq/echo "$_"/)'? -
您还应该考虑向系统传递参数的列表。这样,您不必调用 shell 并且引用不再是问题:
system('/bin/echo', $_)-- perldoc.perl.org/functions/system.html -
谢谢@Shawn,我想我的问题更多是关于理解 bash 语法,而不是寻求最好的 perl 解决方案(当然,总是欢迎新的 perl 知识)。阅读链接的答案后,我以为我了解单/双引号的工作原理,但在这种情况下它不够。
-
@glennjackman 我不知道你可以打电话给
system并提供一份名单,谢谢。 -
第二个例子:你不能使用单引号,因为
$_是一个perl变量,需要在字符串中插入双引号