专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>高级Bash脚本编程指南>

9.7. 双括号结构

百度收藏 QQ搜藏

类似于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

上一篇:9.6. $RANDOM: 产生随机整数 下一篇:10.1. 循环(1)

power by soyo123 2007-2008