TA的每日心情 | 怒 2016-7-1 19:50 |
---|
签到天数: 81 天 连续签到: 1 天 [LV.6]常住居民II 扫一扫,手机访问本帖
|
Bash 支持使用整数的 shell 算法。您可以将一个表达式计算为算术值,并使用 let内建命令将它赋给一个变量。您可以明确将变量声明为整数变量,未来对它的赋值将会计算为整数表达式。 例子 1显示了两种方法的示例和一些细微区别。
例子 1. 变量赋值和算法
- cxz@a8z8.com:~$ x=3+4
- cxz@a8z8.com:~$ let y=5*10
- cxz@a8z8.com:~$ declare -i z=5*4/3
- cxz@a8z8.com:~$ echo $x $y $z
- 3+4 50 6
- cxz@a8z8.com:~$ # Use declare -p to show more information
- cxz@a8z8.com:~$ declare -p x y z
- declare -- x="3+4"
- declare -- y="50"
- declare -i z="6"
复制代码
请注意,只有变量 z被声明为整数。
您可以在 shell 算法中使用大部分 C 或 C++ 算术运算符,包括逐位和逻辑运算符。您可以使用前和后增量运算符,以及常用的 C 或 C++ 幅值运算符,比如 +=、&&=和 |=。如果需要将运算分组,可以使用圆括号。如果愿意的话,可以使用 let和 declare在一行中为多个变量赋值。如果希望在一个算术表达式中使用一个变量值,则不需要在变量名前使用 $,但是,如果您愿意的话,也可以这么做。 例子 2给出了 bash 中的更多算法例子。
例子 2. 更多算术赋值例子
- cxz@a8z8.com:~$ declare -i p q r
- cxz@a8z8.com:~$ let p=" x + 7 " q=" (y * 2**4) / 100 "
- cxz@a8z8.com:~$ q=" 2**z - (50 /3 ) + 7%4 "
- cxz@a8z8.com:~$ r=4
- cxz@a8z8.com:~$ r+=" q + ( 17 > 4) "
- cxz@a8z8.com:~$ echo $p $q $r
- 14 51 56
- cxz@a8z8.com:~$ declare -p p q r
- declare -i p="14"
- declare -i q="51"
- declare -i r="56"
- cxz@a8z8.com:~$ let t=3 u=p+q
- cxz@a8z8.com:~$ echo $t $u
- 3 65
- cxz@a8z8.com:~$ declare -p t u
- declare -- t="3"
- declare -- u="65"
复制代码
请注意,=符号左边不能有空格,而且它的右边任何包含空格的内容都必须放在单引号或双引号中。您可以使用 (( ))结构来进行赋值,从而扩展这些规则。您不需要转义 ((和 ))之间的运算符。 例子 3显示了如果在错误的位置拥有空格会发生的情况,以及如何使用 (( ))来缓解该问题。
例子 3. 算法、空格和 (( ))
- cxz@a8z8.com:~$ declare -i t
- cxz@a8z8.com:~$ t= 3**3 % 5
- 3**3: command not found
- cxz@a8z8.com:~$ t = 3**3 % 5
- t: command not found
- cxz@a8z8.com:~$ (( t = 3**3 % 5 ))
- cxz@a8z8.com:~$ echo $t
- 2
- cxz@a8z8.com:~$ # Logical expression using unescaped shell meta characters
- cxz@a8z8.com:~$ (( u = ( 3 > 5 ) || ( 4 < 6 ) ))
- cxz@a8z8.com:~$ echo $u
- 1
复制代码
|
|