shell 整型变量定义

4.8 定义整型变量命令declare -i

用带选项-i 的declare 命令,可以使变量具有整数(integer)属性。Bash 本质上只有字符型变量,但通常也可以说:定义整型变量。

例如,希望得到45+20 的整数运算结果:


$ M=45+20
$ echo $M
45+20

执行M=45+20 之后,M 的值为字符串45+20 , 而不是希望得到的65 。执行M=$((45+20),或let M=45+20 才能得到65。如果事先声明变量是整型数,就不必使用$((…))或者let。见下例:


$ declare -i K
$ K=45+20
$ echo $K
65

再看一个例子。C 被声明为整型变量,所以C 的值为15+30=45;D 没有被声明为整型,所以D 的值是字符串15+30,而不是期望得到的45:


$ A=15 B=30
$ declare -i C=$A+$B
$ D=$A+$B
$ echo C=$C, D=$D
C=45, D=15+30

如果整型数被赋值为字符或不带空格的字符串时,系统不会报错,并且整型变量实际被赋值为0:

$ declare -i M # 声明整型变量M
$ M="web" # 变量M 被赋值为无空格的字符串
$ echo $M
0 # 显示M 的值为0

整型数被赋值为带空格的字符串时,系统将报错:

$M="web site" # 变量M 被赋值为带空格的字符串,出错
bash: web site: syntax error in expression (error token is "site")

前面提到的数都是十进制数,Bash 支持其他进制的数,支持的范围是从二进制到六十四进制。非十进制数赋值的格式为:


变量=基数#数值

基数的取值范围为2 到64,常用的有二进制、八进制、十六进制等。例如:

$ declare -i x
$ x=2#110 # 二进制的110 赋给x
$ echo $x
6 # 二进制的110 就是十进制的6
$ x=8#16 # 八进制的16 赋给x
$ echo $x
14 # 八进制的16 就是十进制的14
$ x=16#2A # 十六进制的2A 赋给x
$ echo $x
4 2 # 十六进制的2A 就是十进制的42

以0 开头的数表示八进制数,以0x 开头的数表示十六进制数,这一点与C 语言一致。例如:


$ x=025 # 八进制的25 赋给x
$ echo $x
21 # 八进制的25 就是十进制的21
$ x=0x25 # 十六进制的25 赋给x
$ echo $x
37 # 十六制的25 就是十进制的37

赋值时,某一位数大于基数的话,赋值将失败。例如:


$ x=029 # 以0 开头的为八进制数,数字只能取0 到7,9 超出基数,赋值失败
bash: 029: value too great for base (error token is "029")
$ x=16#2G # 十六进制数字只能取0 到9、A 到F,G 超出基数,赋值失败
bash: 16#2G: value too great for base (error token is "16#2G")

你可能感兴趣的:(linux)