免费注册 查看新帖 |

Chinaunix

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

echo的结果为什么是这样的?求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-16 09:16 |只看该作者 |倒序浏览
小弟看了learning bash 2nd后有两个很弱的问题
1.\转义发生在哪个步骤
#touch '\1'     /*创建一个名字为/1的普通文件*/
#a='\?'
#echo $a
\?
结果很迷惑啊.
learning bash 2nd说当$a作完参数替换后,就应该进行word split ==>globbing.而这里shell并没有把\?globbing,也没有转义,似乎直接就是输出\?文本含义.为什么这样
如果这样做
#eval echo $a
?
结果就是\?被shell重新"解释"了一遍,那请问转义在某个步骤发生了
2.I/O定向发生在那个步骤
#( ls)>a
#cat a|grep '\<a\>'
a
也就是说在ls执行前,shell首先扫描命令行发现了'>'后进行了I/O定向,并先产生了个空文件a.那i/o定向是发生在那个步骤之后?那个步骤之前呢?
###
如能告知,万分感谢

论坛徽章:
0
2 [报告]
发表于 2007-03-16 09:42 |只看该作者
参见http://www.unix.org.ua/orelly/unix/ksh/ch07_03.htm
1. 如果没有任何干扰的话,转义早于11步骤的任何一个步骤(shell最先处理单、双引号、转义符,个人认为此步骤应算作第1步骤,整个shell执行过程应该是12步骤)。
单引号让其中的转义符不再具有转义功能。而echo $a,变量替换后才出现转义符,而转义的步骤已经走过,当然不会再次转义。
2. 第11步骤,但在执行命令前。

论坛徽章:
0
3 [报告]
发表于 2007-03-16 14:21 |只看该作者
受教了 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP