Advanced Bash-Scripting Guide: An in-depth exploration of the art of shell scripting | ||
---|---|---|
Prev | Chapter 9. Variables Revisited | Next |
类似于let命令,((...))结构允许算术计算和求值. 它最简单的形式a=$(( 5 + 3 )) 会把变量"a"的值设置成"5 + 3"或8. 但是,在Bash中双括号结构也是遵循C风格的变量操作的一种机制.
例子 9-30. C风格的变量操作
1 #!/bin/bash 2 # 用((...))结构来使用C风格操作符来处理变量. 3 4 5 echo 6 7 (( a = 23 )) # 以C风格来设置一个值,在"="两边可以有空格. 8 echo "a (initial value) = $a" 9 10 (( a++ )) # C风格的计算后自增. 11 echo "a (after a++) = $a" 12 13 (( a-- )) # C风格的计算后自减. 14 echo "a (after a--) = $a" 15 16 17 (( ++a )) # C风格的计算前自增. 18 echo "a (after ++a) = $a" 19 20 (( --a )) # C风格的计算前自减. 21 echo "a (after --a) = $a" 22 23 echo 24 25 ######################################################## 26 # 注意,就像在C中一样,计算前自增自减和计算后自增自减有一点不同的的副作用 27 # 28 29 n=1; let --n && echo "True" || echo "False" # False 30 n=1; let n-- && echo "True" || echo "False" # True 31 32 # 多谢Jeroen Domburg. 33 ######################################################## 34 35 echo 36 37 (( t = a<45?7:11 )) # C风格的三元计算. 38 echo "If a < 45, then t = 7, else t = 11." 39 echo "t = $t " # Yes! 40 41 echo 42 43 44 # ----------------- 45 # 复活节彩蛋大礼! 46 # ----------------- 47 # Chet Ramey显然在此偷偷地隐瞒了Bash中双括号的C风格结构 48 #+ (实际上是从ksh中继承来的,两者非常的接近). 49 # 在Bash的文档里, Ramey称((...))为shell算术计算, 50 #+ 但它所能做的远远超出这个. 51 # 不好意思, Chet,现在秘密已经被揭开了. 52 53 # 参考"for"和"while"循环中使用((...))结构的章节. 54 55 # 这个只能在Bash版本 2.04以上才能工作. 56 57 exit 0 |
参考例子 10-12.