2014-02-25 30 views
-1

我从bash的手册页知道null或unset的变量被视为零。 我想在算术评估中非数字应该被视为零。 但是,如果没有官方的裁决,可能会像下面第二个例子那样模棱两可。在算术评估中解析非数字时的行为

$ FOO=10 
$ echo $((FOO)) 
10 
$ FOO=10.abc 
$ echo $((FOO)) 
bash: 10.abc: syntax error: invalid arithmetic operator (error token is ".abc") 

选自C的atoi()分析第二示例为10
有什么形式语义的 解析非数在bash的算术评价是什么?

回答

0

$(( ... ))用于算术扩展的构造在80年代首次在Korn shell中引入,然后被用于bash(其原本具有不同的算术扩展语法)和POSIX。

Bash和ksh93期望$((...))内部格式正确的算术表达式。他们在解析它们时超出了atoi()

在这种情况下,shell如何处理空的和未设置的变量是一个红色的鲱鱼。这是一个明智的便利,恰好在shell的情况下才有意义。

+0

不是红鲱鱼imo。我认为shell处理空/未设值的方式,无效值应该设置好。我从manpage找到了前一个案例,但仍没有得到后一种情况。 –

+0

在软件中,您需要提供正确的答案,或者为了阻止任何错误传播而进行救助。 –