此问题适用于Windows 10上的Perl v5.24.0
除了最简单的情况。在程序之间传递命令行和参数列表始终是一个问题。考虑到空格和 shell 元字符的影响,可能使数据在多个级别的调用中保持完整,可能会导致一堆转义符和引号
Elixir 一直是使用system
的多参数形式(它也尝试避免将shell称为中介),以便可靠地分隔每个参数而无需使用引号
这样的电话
system("dir \"C:\\Program Files\\\"")
这样写在眼睛上要容易得多system('dir', 'C:\Program Files\\')
但是,我看不到任何传递包含引号的值的方法如果我写一个测试程序
show.pl
use Data::Dump;
dd \@ARGV;
然后打电话system('show', 'xxx')
那么我得到的输出就是我所期望的["xxx"]
但是,假设我想传递字符串"xxx"
。如果我尝试system('show', '"xxx"')
然后在该过程中的某些时候将引号除去,并且输出与前面的示例相同如何调用
system
以使输出为["\"xxx\""]
?我已经尝试了各种逃避方法,但是解决方案使我回避了
最佳答案
问题:
system($^X, '-E', 'say @ARGV', '"test"');
输出:
test
太坏了![1]
解决方案:
use Win32::ShellQuote qw( quote_system );
system(quote_system($^X, '-E', 'say @ARGV', '"test"'));
输出:
"test"
system BLOCK LIST
语法无济于事的原因。 关于perl - 将带引号的字符串传递给system(),使引号保持完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38221923/