system()函数如何输出“‘”

system()函数如何输出“‘”

system("echo '(utt.save utt1 '/root/myfile.utt)' “)出错
请问想要输出“‘”如何做到?
这东西不出错才怪
连'都没有匹配
我就是想输出‘
我想输出(utt.save utt1 '/root/myfile.utt) 撇也要输出!
加 \ 转义一下,或者用十六进制表示,多试几次……


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
my @arg = ( "echo", "'(uut.save utt1 '/root/myfile.utt)'");
system @arg;



QUOTE:
<lig@romeo:~/chinaunix>$ ./system
'(uut.save utt1 '/root/myfile.utt)'



QUOTE:
原帖由 churchmice 于 2008-4-30 18:03 发表

#!/usr/bin/perl
use strict;
use warnings;
my @arg = ( "echo", "'(uut.save utt1 '/root/myfile.utt)'");
system @arg;


谢谢你的热心解答,你的方法是可行的!但是如果要同时把(uut.save utt1 '/root/myfile.utt)输入到另一个文件上呢?
比如 |tee -a dump


QUOTE:
原帖由 paminy 于 2008-4-30 22:27 发表
比如 |tee -a dump

Try this

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
system("echo \"(uut.save.utt1 '/root/myfile.utt)\" | tee -a dump");



QUOTE:
<lig@romeo:~/chinaunix>$ ./system
(uut.save.utt1 '/root/myfile.utt)
<lig@romeo:~/chinaunix>$ cat dump
(uut.save.utt1 '/root/myfile.utt)

Hope this is what you want.
需要注意\",表示该处的"是传递给sh的
其实这个问题在于()造成的歧义
见下面的实验
你直接在sh里面的话用backslash就可以解决

QUOTE:
<lig@romeo:~/chinaunix>$ echo (a.b)
-bash: syntax error near unexpected token `a.b'
<lig@romeo:~/chinaunix>$ echo \(a.b\)
(a.b)
<lig@romeo:~/chinaunix>$ echo \(a.b'\)
>
<lig@romeo:~/chinaunix>$ echo \(a.b\'\)
(a.b')

因而也可以用如下的代码实现:
只是需要注意首先perl会进行一次interpolation(因为""),然后再是sh

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
system("echo \\(uut.save.utt1 \\'/root/myfile.utt\\) | tee -a dump");

运行结果是一样的
当然下面的代码也是可行的

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
system('echo \(uut.save.utt1 \\\'/root/myfile.utt\) | tee -a dump');