LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2106|回复: 15

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

[复制链接]
发表于 2007-6-26 15:04:51 | 显示全部楼层 |阅读模式
在 OpenDadius 项目中的 build/ccd-gcc 脚本中有一下的片段:

  1. if [ x"$CC" = x ]
  2. then
  3.         CC=gcc
  4.         export CC
  5. fi
复制代码

其中的 if 语句中的 x 是什么意思?
发表于 2007-6-26 17:35:26 | 显示全部楼层
就是x加后面那个变量如果还是等于x的话那么说明这个变量是空的.
如果不等于x说明那个$CC里面有内容.
好像跟-z是一回事.
回复 支持 反对

使用道具 举报

发表于 2007-6-26 22:20:17 | 显示全部楼层
但是似乎很多人都这么用。奇怪。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-27 01:02:40 | 显示全部楼层
Post by Yuri
就是x加后面那个变量如果还是等于x的话那么说明这个变量是空的.
如果不等于x说明那个$CC里面有内容.
好像跟-z是一回事.


呵呵,我的同事帮我找到答案了,和这为老兄的一样,
不知道为什么要这样表示,开始的时候,我还以为 x 是什么特殊的运算符呢。
回复 支持 反对

使用道具 举报

发表于 2007-6-27 01:38:31 | 显示全部楼层
纯属猜测:也许以前的 bash/ksh 等不支持 -z  这类测试。。所以。。。。:)
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2007-6-27 10:37:25 | 显示全部楼层
abs中提到的

in a compound test, even quoting the string variable
might not suffice. [ -n "$string" -o "$a" = "$b" ] may cause an error
with some versions of Bash if $string is empty. The safe way is to
append an extra character to possibly empty variables, [ "x$string" != x
-o "x$a" = "x$b" ] (the "x's" cancel out).
回复 支持 反对

使用道具 举报

发表于 2007-6-27 11:28:27 | 显示全部楼层
Post by seamonkey
abs中提到的

这样看来,两种用法就不是一回事了,不过文中也说了:
[ -n "$string" -o "$a" = "$b" ] may cause an error
with[color="Red"] some versions of Bash if $string is empty.
属于历史遗留问题啊

abs是什么?
回复 支持 反对

使用道具 举报

发表于 2007-6-27 12:15:37 | 显示全部楼层
Advanced Bash-Scripting Guide
回复 支持 反对

使用道具 举报

发表于 2007-6-27 12:17:29 | 显示全部楼层
各种Bourne Shell衍生之间,以及同一shell不同版本之间的差别,是很麻烦的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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