- 论坛徽章:
- 0
|
abs 81页上面有这样的介绍.
(( ))结构扩展并计算一个算术表达式的值. 如果表达式的结果为0, 那么返回的退出状态码为1, 或者
是"假". 而一个非零值的表达式所返回的退出状态码将为0, 或者是"true". 这种情况和先前所讨论
的test命令和[ ]结构的行为正好相反.
例子 7-3. 算术测试需要使用(( ))
1 #!/bin/bash
2 # 算术测试.
3
4 # (( ... ))结构可以用来计算并测试算术表达式的结果.
5 # 退出状态将会与[ ... ]结构完全相反!
6
7 (( 0 ))
8 echo "Exit status of \"(( 0 ))\" is $?." # 1
9
10 (( 1 ))
11 echo "Exit status of \"(( 1 ))\" is $?." # 0
12
13 (( 5 > 4 )) # 真
14 echo "Exit status of \"(( 5 > 4 ))\" is $?." # 0
15
16 (( 5 > 9 )) # 假
17 echo "Exit status of \"(( 5 > 9 ))\" is $?." # 1
18
19 (( 5 - 5 )) # 0
20 echo "Exit status of \"(( 5 - 5 ))\" is $?." # 1
21
22 (( 5 / 4 )) # 除法也可以.
23 echo "Exit status of \"(( 5 / 4 ))\" is $?." # 0
24
25 (( 1 / 2 )) # 除法的计算结果 < 1.
26 echo "Exit status of \"(( 1 / 2 ))\" is $?." # 截取之后的结果为 0.
27 # 1
28
29 (( 1 / 0 )) 2>/dev/null # 除数为0, 非法计算.
30 # ^^^^^^^^^^^
31 echo "Exit status of \"(( 1 / 0 ))\" is $?." # 1
32
33 # "2>/dev/null"起了什么作用?
34 # 如果这句被删除会怎样?
35 # 尝试删除这句, 然后在运行这个脚本.
36
37 exit 0
13 (( 5 > 4 )) # 真
14 echo "Exit status of \"(( 5 > 4 ))\" is $?." # 0
15
16 (( 5 > 9 )) # 假
17 echo "Exit status of \"(( 5 > 9 ))\" is $?." # 1
18
按最上面换的意思来说,5>4 是这个表达式的值为为真,相当于((0)),应该返回1才对吧.
如果不按上面的话来,从逻辑上来看((5>4))是真,应该返回0的.
还有let "1<2" return 0 (as 1<2 expands to "1") 这句话何解??? |
|