繁体   English   中英

使用空变量进行Bash算术扩展行为

[英]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

但是使用$varvar之间存在差异:

$ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM