变量的值在被引用或赋值时被计算为算术表达式

变量的值在被引用或赋值时被计算为算术表达式

来自 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+1Hello=Hello)。

具有整数属性的变量,IE使用 , 声明的变量declare -i在赋值时被强制转换为整数,而不是在使用时:

$ declare -i i
$ i=Hello
$ echo ${i}
0

请注意,在所有这些情况下,都不会报告任何错误。

整数属性变量可以与算术表达式一起使用,无需任何语法糖:

$ declare -i i
$ i=3+4
$ echo ${i}
7

这是它们的赋值被解释为算术表达式这一事实的直接结果。

相关内容