[英]Bash arithmetic expansion behaviour with empty variables
我无法理解bash算术扩展在某些特定情况下的工作原理:
满足所有这些要求后,我得到错误:
语法错误:操作数预期(错误标记是......
这里有些例子 :
unset var # or var=''
unset value
echo $(($var * 2)) # error
echo $(($var + 2)) # no error
echo $((var * 2)) # no error
var='value'
echo $(($var * 2)) # no error
为什么在第一个语句中var不会被所有其他语句中的0替换?
算术上下文中参数名称的扩展具有特殊属性。 例如,在我们找到数值之前,将解析参数名称:
$ var1=5
$ var2=var1
$ echo $(( var2 ))
5
如果链结束,例如,如果在上面的示例中未定义var1
,则结果为零:
$ unset var1
$ echo $(( var2 ))
0
直接使用参数名称也会扩展为零:
$ echo $(( var1 ))
0
即使没有扩展到零:
$ echo $(( ))
0
但是使用$var
和var
之间存在差异:
$ unset var
$ echo $(( var * 1 ))
0
$ echo $(( $var * 1 ))
-bash: * 1 : syntax error: operand expected (error token is "* 1 ")
第一个扩展为0 * 1
,但第二个扩展为* 1
,这是语法错误,因为*
需要两个操作数。 这是你的第一个例子。
你的第二个例子扩展到+ 2
,这很好: +
被解释为一元加号。 正如您在问题中所假设的那样,它不会被零替换。
第三个和第四个都扩展为0 * 2
,如上所示:非整数值(如value
在算术上下文中被解释为零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.