免费注册 查看新帖 |

Chinaunix

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

[其他] SHELL是如何处理赋值语句的? [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
11 [报告]
发表于 2014-08-02 22:21 |只看该作者
本帖最后由 jason680 于 2014-08-02 22:45 编辑

回复 10# iLRainyday


$ set -x; ./x a_${count}=filename; set +x
+ ./x a_0=filename
++ set -v
echo $1
++ echo a_0=filename
a_0=filename
+ set +x

$ cat x
set -x
set -v
echo $1


the ./x(eval) didn't get the ${count}, but get the 0

./x a_${count}=filename
1. first time, shell get the ./x command, and expand the variable for ./x

2. ./x only get the 0, and didn't know the ${count}
    ./x a_0=filename

>>...在使用eval的时候,也就是第二次进行命令行处理的时候,对等号左端进行了expansion。这和你之前所讲到等号左端不进行处理又矛盾了啊~


eval a_${count}=filename
1. first time, shell get the eval command, and expand the variable for eval

2. eval only get the 0, and didn't know the ${count}
    eval a_0=filename

3. eval function will send a_0=filename to assign variable again.

注: 等号左端不进行处理  
  指的是赋值语句中Left=Right 时, Left 不展开....
eval .... (shell第一次处理eval ...时,并不是赋值语句...)
   

论坛徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉鸡
日期:2014-08-04 20:05:38双鱼座
日期:2014-08-09 21:53:54
12 [报告]
发表于 2014-08-02 22:37 |只看该作者
回复 10# iLRainyday


    我的理解是,如果等号的左边使用了变量(或者其他的类似扩展),那么shell在执行命令时,将不再视其为 赋值语句

    拿a_${count}=filename来讲,shell在执行时,将其作为一个token(这个不知道怎么翻译,就写英语吧),即整条命令仅有一个token.

    接下来会执行命令的各种expansion/word split等,最终执行的命令为:a_0=filename

注意,这儿是一个命令不是一个赋值语句,也就是说shell打算去执行一个名字叫做’a_0=filename'的命令,而其没有找到该命令,所以报错退出。


    如果前面加上eval,那么进行第一次扩展之后,语句应该是eval 'a_0=filename',此时再次执行时,shell执行的实际上是eval参数指定的命令,即:
a_0=filename,此时shell分析其是一个赋值语句,正常执行赋值过程。


    ps:本人对shell了解有限,不对之处请指出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP