免费注册 查看新帖 |

Chinaunix

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

网中人兄:请进来说个究竟!echo ${IFS}a与oldifs=$IFS的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-21 21:20 |只看该作者 |倒序浏览
shell会根据IFS中的字符,将整个命令行分解为一个个word,然后进行替换.......
这句话我似懂非懂。
echo ${IFS}a 这个命令中,shell先对${IFS}进行替换,替换为space tab enter这三个字符,可是shell在给echo命令传递参数时会将这三个字符忽略(可能认为它们除了起IFS的作用外,没有别的作用,因为没有被qota),所以shell只是将a传给了echo命令。结果如下:
echo ${IFS}a
a

我的问题是:在学习 网中人老师的 讲解 IFS的贴子时,常见他这样来保存先前的IFS设置:oldifs=$IFS,在这个句子中,shell先对$IFS进行替换,也变成了space tab enter,然后再将它们传给oldifs这个变量,为什么在这个操作里边,shell没有将space tab enter视为meta,而是把它们作为literal传给了oldifs呢?在我的理解中,shell对$IFS进行替换后,命令是这样的:oldifs=spacetabenter,(我用名词代替了这几个空白字符)。

大师们,我的理解错在哪里?我正处于学习的艰难期,谢谢大家!

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00
2 [报告]
发表于 2006-05-21 22:04 |只看该作者
系统自已的变量本身都是已经quote的吧。
IFS='spacetabenter'
oldifs=$IFS='spacetabenter'

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-05-21 22:45 |只看该作者
其實要分兩個層次:
1) shell
2) command
當你設定 var=value 時, 本身是 shell 這層的, 可以得到原有的值.
但當你交個 command 時, 如 echo $var, 則是先解釋 command line, 然後再交給 command 執行...
恩... 我也說得不是很精確... 要將一個自己理解的概念表達出來又不至於被誤解, 其實難度是很高的...   ^_^

论坛徽章:
0
4 [报告]
发表于 2006-05-25 18:25 |只看该作者
“但當你交個 command 時, 如 echo $var, 則是先解釋 command line, 然後再交給 command 執行...”
请问:shell会递归进行吗?
比如它先替换$a,然后得到的结果里面又含有$b这样的字串,然后它又必须去替换$b .....?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-05-25 22:49 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP