免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3395 | 回复: 10
打印 上一主题 下一主题

system()函数如何输出“‘” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-30 15:43 |只看该作者 |倒序浏览
system("echo '(utt.save utt1 '/root/myfile.utt)' “)出错
请问想要输出“”如何做到?

论坛徽章:
0
2 [报告]
发表于 2008-04-30 16:29 |只看该作者
这东西不出错才怪
连'都没有匹配

论坛徽章:
0
3 [报告]
发表于 2008-04-30 16:45 |只看该作者
我就是想输出‘

论坛徽章:
0
4 [报告]
发表于 2008-04-30 16:48 |只看该作者
我想输出(utt.save utt1 '/root/myfile.utt) 撇也要输出!

论坛徽章:
0
5 [报告]
发表于 2008-04-30 17:39 |只看该作者
加 \ 转义一下,或者用十六进制表示,多试几次……

论坛徽章:
0
6 [报告]
发表于 2008-04-30 18:03 |只看该作者

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my @arg = ( "echo", "'(uut.save utt1 '/root/myfile.utt)'");
  5. system @arg;
复制代码
<lig@romeo:~/chinaunix>$ ./system
'(uut.save utt1 '/root/myfile.utt)'

论坛徽章:
0
7 [报告]
发表于 2008-04-30 21:15 |只看该作者
原帖由 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)输入到另一个文件上呢?

论坛徽章:
0
8 [报告]
发表于 2008-04-30 22:27 |只看该作者
比如 |tee -a dump

论坛徽章:
0
9 [报告]
发表于 2008-04-30 23:19 |只看该作者
原帖由 paminy 于 2008-4-30 22:27 发表
比如 |tee -a dump

Try this

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. system("echo \"(uut.save.utt1 '/root/myfile.utt)\" | tee -a dump");
复制代码
<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的

论坛徽章:
0
10 [报告]
发表于 2008-04-30 23:29 |只看该作者
其实这个问题在于()造成的歧义
见下面的实验
你直接在sh里面的话用backslash就可以解决
<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

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. system("echo \\(uut.save.utt1 \\'/root/myfile.utt\\) | tee -a dump");
复制代码

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

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. system('echo \(uut.save.utt1 \\\'/root/myfile.utt\) | tee -a dump');
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP