免费注册 查看新帖 |

Chinaunix

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

关于shell的IFS [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-03-14 15:27 |只看该作者

回复 #18 blackold 的帖子

恕我直言,我还是不太明白,小弟愚钝,还没弄清shell执行的过程,哪位明白了,请指教,真心谢谢!

论坛徽章:
0
22 [报告]
发表于 2009-03-14 15:41 |只看该作者
我一直的理解是:当在命令行运行./test(假设lz的脚本的名字),当前shell便产生一个subshell的子进程用以执行脚本,当subshell遇上"A=B  echo  $A"时,(由于都是内建命令,故不产生子进程)奉行先替换后重组的”原则“,先把$A替换(也就是什么都没有!),然后执A=B echo ,执行完这句A=B ,然后subshell依次执行下面的语句,echo $A,此时$A就应当是B了。请大家指正,本人真心求教!

论坛徽章:
0
23 [报告]
发表于 2009-03-14 15:41 |只看该作者

回复 #21 wendaozhe 的帖子

我也没完全明白,看来还得看看书。

论坛徽章:
0
24 [报告]
发表于 2009-03-14 15:45 |只看该作者
原帖由 wendaozhe 于 2009-3-14 15:41 发表
我一直的理解是:当在命令行运行./test(假设lz的脚本的名字),当前shell便产生一个subshell的子进程用以执行脚本,当subshell遇上"A=B  echo  $A"时,(由于都是内建命令,故不产生子进程)奉行先替换后重组的” ...


你的理解有个地方是肯定错了,命令是先替换后重组的,"A=B  echo  $A",$A已经被替换为空了,那命令就变成"A=B echo",怎么还可能执行echo B呢
比如a="xxx"
echo $a   ($a被替换为xxx)==>echo xxx

[ 本帖最后由 ywlscpl 于 2009-3-14 16:08 编辑 ]

论坛徽章:
2
丑牛
日期:2014-06-11 13:55:04ChinaUnix元老
日期:2015-02-06 15:16:14
25 [报告]
发表于 2009-03-14 15:52 |只看该作者
原帖由 thinshootout 于 2009-3-14 11:07 发表
在阅读《shell十三问》时,遇到如下问题:

    #! /bin/sh
    A=B  echo  $A
    echo  $A

请问输出是什么?为什么?谢谢~

应该是执行顺序的问题吧

论坛徽章:
0
26 [报告]
发表于 2009-03-14 15:57 |只看该作者

回复 #24 ywlscpl 的帖子

没有错啊,先替换后重组,正因为$A unset,才是 A=B echo 嘛,如果A=123那就是 A=B echo 123了。

论坛徽章:
0
27 [报告]
发表于 2009-03-14 15:59 |只看该作者

回复 #25 山野村夫 的帖子

关键是最后一个echo $A,可能还是对shell的执行流程不太懂,糊里糊涂的。

论坛徽章:
0
28 [报告]
发表于 2009-03-14 16:08 |只看该作者

回复 #27 wendaozhe 的帖子

所以还得好好学习,看看书

论坛徽章:
0
29 [报告]
发表于 2009-03-14 16:09 |只看该作者
命令替换A=B echo $A==>A=B echo
既然替换已经完成了,命令中就不会再有echo $A了

[ 本帖最后由 ywlscpl 于 2009-3-14 16:20 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2009-03-14 16:18 |只看该作者

回复 #29 ywlscpl 的帖子

没有啊,替换之后不就是 A=B echo吗,它直接就交由subshell执行了!怎么取两次值呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP