提问人:Borodin 提问时间:7/6/2016 最后编辑:CommunityBorodin 更新时间:7/18/2016 访问量:633
将带引号的字符串传递给 system() 保持引号不变
Passing a quoted string to system() keeping quotes intact
问:
此问题适用于 Windows 10 上的 Perl v5.24.0
除了最简单的情况。在程序之间传递命令行和参数列表始终是一个问题。考虑到空格和 shell 元字符的影响,可能使数据在多个调用级别上保持完整,可能会涉及一堆转义和引号
灵丹妙药一直是使用 的多参数形式(这也试图避免将 shell 称为中介),以便可靠地分离每个参数,而无需诉诸引号system
像这样的电话
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\""]
我尝试了各种逃避方式,但解决方案避开了我
答:
4赞
ikegami
7/6/2016
#1
问题:
system($^X, '-E', 'say @ARGV', '"test"');
输出:
test
太坏了![1]
溶液:
use Win32::ShellQuote qw( quote_system );
system(quote_system($^X, '-E', 'say @ARGV', '"test"'));
输出:
"test"
下一个:Perl qq 和下划线
评论
system