LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: robinswan

shell 条件判断中的 x 是什么意思

[复制链接]
发表于 2007-6-27 14:34:10 | 显示全部楼层
Post by biinn
[ x"$CC" = x ] 和 [ -z "$CC" ] 是一回事,用哪个纯是个人喜好。
不过在条件 [ x"$CC" = xgcc ] 中,如果不确定$CC是否为空, 这个x是必须的。否则这个条件就变成了 [ = gcc ],shell 会报错。

另外在特殊条件下,例如在嵌入系统中,为了节省flash存储空间,script要写得短小精悍。楼主的例子可以写成:
[ -n "$CC" ] || { CC=gcc; export CC; }


如果CC变量为空的话,[ "" = gcc ]在bash中会报错么?我试了一下没什么问题啊?还是说其他的shell比如sh会报错?
回复 支持 反对

使用道具 举报

发表于 2007-6-28 01:31:05 | 显示全部楼层
如果会出错,那 -z 就没用了;)。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 02:06:04 | 显示全部楼层
Sorry. I cannot type Chinese in my office.

if $CC is undefined, [ "$CC" = gcc ] has syntax error, but [ -z "$CC" ] doesn't
回复 支持 反对

使用道具 举报

发表于 2007-6-29 12:27:07 | 显示全部楼层
的确,x存在就是为了防范异常错误
回复 支持 反对

使用道具 举报

发表于 2007-7-2 15:19:35 | 显示全部楼层
我的测试和输出,不知道是不是我理解的不对,请问怎么会出现语法错误啊?
[skycleaner@^_^ aaa]$ if [ "" != gcc ]; then echo no; fi
no
[skycleaner@^_^ aaa]$ [ -z "$AAA" ]
[skycleaner@^_^ aaa]$ echo $?
0
[skycleaner@^_^ aaa]$ [ "$AAA" = gcc ]
[skycleaner@^_^ aaa]$ echo $?         
1
[skycleaner@^_^ aaa]$
回复 支持 反对

使用道具 举报

发表于 2007-7-3 00:33:45 | 显示全部楼层
Post by skycleaner
我的测试和输出,不知道是不是我理解的不对,请问怎么会出现语法错误啊?
[skycleaner@^_^ aaa]$ if [ "" != gcc ]; then echo no; fi
no
[skycleaner@^_^ aaa]$ [ -z "$AAA" ]
[skycleaner@^_^ aaa]$ echo $?
0
[skycleaner@^_^ aaa]$ [ "$AAA" = gcc ]
[skycleaner@^_^ aaa]$ echo $?         
1
[skycleaner@^_^ aaa]$

抱歉,我没注意到我说错了。
变量不加引号才会错。所以如果加了引号的话,x是不必要的。不知道它们之间本质的区别。不过我一直是加引号,不用x,目前没有发现问题,呵呵。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表