您的位置:首页 > 运维架构 > Shell

shell中if语句后面的[和]的左右空格

2011-03-26 16:49 197 查看
        很多人都认为shell的语法过于死板,不好理解,很常见的一个例子就是if [ xxoo ]; then ooxx;fi这样的条件判断,如果“[”的左右或“]”的左边不加空格,shell就会出现语法问题.看上去这种语法分析跟很多语言的语法分析器不太一样,比如c/c++的if(xxoo){ooxx},小括号或者花括号两边的空格,你加,或者不加,编译器就在那里,不error不warning.那么,究竟是什么,让[左右的空格和]左边的空格不能省略呢?我们whereis [发现,[竟然是linux的一条命令

whereis [

[: /usr/bin/[

这就很好解释了,既然[是一条命令,为了消除语法的二义性,空格看来是不能省略的了.

关于[命令,基本和test是一直的设置系统的$?值,当[]中的值为true时#?被设置成0,否则为1;值得注意的是[ ];echo $?得到的结果是1;说明[在什么都不做的情况下的返回值是false.而[ null ];echo $?得到的是0.这种关系就和集合论里面的{}是空集,而{{}}显然不是空集是一样的道理.

更多阅读:

http://learn.akae.cn/media/ch31s05.html

 

http://www.cnblogs.com/roovent/archive/2010/12/11/1903503.html

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息