- 论坛徽章:
- 1
|
请问替代test语句的[ ]和[[ ]]表达式有什么区别啊
shaoping0330的钻研精神让人佩服。我再补充几点:
1.((...))等价于let,专门用来进行算术运算、比较,bsh中也可以使用,而且最妙的是它支持C风格的运算符。要取得算术表达式的值时可以用"$((expression))"形式
举例:
- $ ((i=1+99)) ; echo $i
- 100
- $ echo $((i++))
- 101
- $ echo $((--i))
- 100
- $ echo $((2**3))
- 8
- $ echo $((5%3))
- 2
- $ echo $((1<2?10:20))
- 10
复制代码
2.test等价于[],与[[]]相似但有些区别;既可用于算术运算、比较又可用于字符串、文件测试。算术比较用 -eq, -lt, -gt, -le, -ge,字符串比较用<, >, =, !=, >=和<=这两个是无效的。[]中逻辑运算用:-a, -o,而[[中用&&, ||;[[不能用于bsh,但可用在ksh/bash/zsh中。
3.正如我在以前的帖子中指出的,可以把[...]看作一个shell命令,方括号中的内容就是命令行参数。所以"<"、">"并不是不可以用在[...]中,只不过他们是shell的"元字符",使用前必须用"\"转义,去掉其特殊含义就可以了。
4.关于字符串比较。[...]、[[...]]中都可以对字符串进行比较,比较的顺序是"字典顺序"。对ascii字符来讲,码表中排列在前的较小,如A<B,A<a, 1<2。再强调一次,这里只要用了"<"、">",就表示是字符串比较,那么9 > 100为真,因为这实际上等价于‘9’ > ‘100’,9在码表中排在1后面,所以字符串"9"大于字符串"100"。只要搞清楚了何时是算术比较,何时是串比较,一般就不会出错了。至于不要使用"<"、">"的意见,我不能苟同。:)
5.((...))的结构对于算术运算应该大力提倡,这一点我非常赞成。
6.shaoping说[[在bash与ksh中不同,是指什么?请指教。我对ksh不是很熟。 |
|