来自 bash 手册
允许 Shell 变量作为操作数;参数扩展在计算表达式之前执行。在表达式中,shell 变量也可以通过名称引用,而不使用参数扩展语法。当通过名称引用而不使用参数扩展语法时,为 null 或未设置的 shell 变量的计算结果为 0。当引用变量时,或者为使用“declare -i”赋予整数属性的变量赋值时,变量的值将被计算为算术表达式。null 值的计算结果为 0。shell 变量无需打开其整数属性即可在表达式中使用。
“引用变量时,或者为使用“declare -i”赋予整数属性的变量赋值时,变量的值将被计算为算术表达式”是什么意思?
变量是否被假定用作算术表达式中的操作数? var=3+4
单独的不会被评估为算术表达式。
您能否给出“当引用时”的情况的示例,以及“当使用“declare -i”赋予整数属性的变量被赋值时”的情况的示例?
谢谢。
答案1
“当它被引用时”意味着“当它被使用时”,IE上下文表明变量的值应解释为数字:
$ i=Hello
$ echo ${i}
Hello
$ echo $((i + 1))
1
这里i
显然包含一个字符串,但因为它用在算术表达式中,所以它被解释为算术表达式。如果Hello
这里未设置或为null,则变为0;您可以尝试使用 和 的不同值来i
查看Hello
效果(i=1+1
等Hello=Hello
)。
具有整数属性的变量,IE使用 , 声明的变量declare -i
在赋值时被强制转换为整数,而不是在使用时:
$ declare -i i
$ i=Hello
$ echo ${i}
0
请注意,在所有这些情况下,都不会报告任何错误。
整数属性变量可以与算术表达式一起使用,无需任何语法糖:
$ declare -i i
$ i=3+4
$ echo ${i}
7
这是它们的赋值被解释为算术表达式这一事实的直接结果。