shell中if语句后面的[和]的左右空格
很多人都认为shell的语法过于死板,不好理解,很常见的一个例子就是if [ xxoo ]; then ooxx;fi这样的条件判断,如果“[”的左右或“]”的左边不加空格,shell就会出现语法问题.看上去这种语法分析跟很多语言的语法分析器不太一样,比如c/c++的if(xxoo){ooxx},小括号或者花括号两边的空格,你加,或者不加,编译器就在那里,不error不warning.那么
很多人都认为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
更多推荐
所有评论(0)