免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: thinshootout
打印 上一主题 下一主题

关于shell的IFS [复制链接]

论坛徽章:
0
71 [报告]
发表于 2009-03-20 11:03 |只看该作者
看起来好像不是一般高深

论坛徽章:
0
72 [报告]
发表于 2009-03-20 11:15 |只看该作者
本来以为是懂的,看来才知道不懂。

论坛徽章:
0
73 [报告]
发表于 2009-03-21 23:04 |只看该作者
原帖由 我是DBA 于 2009-3-20 11:15 发表
本来以为是懂的,看来才知道不懂。



试一下这个


$a=b sh
sh$echo  $a         
sh$exit
$echo $a

[ 本帖最后由 dayan_he 于 2009-3-21 23:08 编辑 ]

论坛徽章:
0
74 [报告]
发表于 2009-03-23 16:01 |只看该作者
赞成65楼的解释

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
75 [报告]
发表于 2009-03-23 16:14 |只看该作者
why?
$ echo a:
::

$ a=foo eval echo \$a
foo

$ echo a:
::

论坛徽章:
0
76 [报告]
发表于 2009-03-23 17:28 |只看该作者

回复 #74 pepe 的帖子

说明你没搞懂

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
77 [报告]
发表于 2009-03-24 10:10 |只看该作者
原帖由 labrador001 于 2009-3-16 20:10 发表
#! /bin/sh

a=b echo $a
echo $a
echo ${a=123}

我想上面的代码可以说明问题。 ${a=123} 可以参加shell13问中:${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦 ...


good job!
總算有人看得懂了。

不過,要細說的話,要扯上 shell 在 interpret 一個 command line 時的 priority 。
基本上,其順序如下:
1,將 line 拆成 words (IFS很重要)
2,括展 alias
3,擴展 { }
4,擴展 ~
5,擴展 $variable, $(command), `command`
6,重組再拆成 words
7,括展 wildcards
8,處理 I/O redirection
9,載入命令運行
如果大家有O'Reilly英文版的 Learning the Bash(2nd)的話,請多端詳p178的圖(細節略異)

回到LZ的問題,看上面 5 跟 6 的順序然後才是 9 。
也就是在 6 重組命令時 $A 已經完成替換,當時的 environment 是沒賦值,
因此重組後就是 A=B echo
然後在第 9 的步驟運行命令時, A=B 是給 echo 命令的 local environment,
不管是否 built-in command,都不影響當前的 shell (不同的 shell 在實作上或有差異)
所以第二行的 echo $A 也是得到沒賦值

[ 本帖最后由 網中人 于 2009-3-24 10:56 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
78 [报告]
发表于 2009-03-24 10:12 |只看该作者
原帖由 blackold 于 2009-3-23 16:14 发表
why?

因為你用了 eval ^_^

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
79 [报告]
发表于 2009-03-24 10:18 |只看该作者

回复 #78 網中人 的帖子

拜托,我不是对我自己命令问why.

1,將 line 拆成 words (IFS很重要)

这个不使用IFS吧。

[ 本帖最后由 blackold 于 2009-3-24 10:20 编辑 ]

论坛徽章:
0
80 [报告]
发表于 2009-03-24 10:24 |只看该作者

回复 #77 網中人 的帖子

这个解释很明白,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP