2014-02-25 31 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

在軟件中,您需要提供正確的答案,或者爲了阻止任何錯誤傳播而進行救助。 –