Shell
expr 算術中的括號:3 * (2 + 1)
expr
似乎不喜歡括號(在數學中用於顯式運算符優先級):expr 3 * (2 + 1) bash: syntax error near unexpected token `('
如何在bash中表達運算符優先級?
另一種使用
let
內置 bash 的方法:$ let a="3 * (2 + 1)" $ printf '%s\n' "$a" 9
筆記
正如@Stéphane Chazelas 指出的那樣,
bash
您應該使用((...))
做算術expr
或let
為了易讀性。為了可移植性,請使用
$((...))
@Bernhard answer 之類的。
您可以改用算術擴展。
echo "$(( 3 * ( 2 + 1 ) ))" 9
在我個人看來,這看起來比使用
expr
.從
man bash
算術擴展 算術擴展允許對算術表達式求值並替換結果。算術展開的格式為:
$((expression))
表達式被視為在雙引號內,但括號內的雙引號不會被特殊處理。表達式中的所有標記都經過參數擴展、字元串擴展、命令替換和引號刪除。算術擴展可以嵌套。
評估是根據以下算術評估下列出的規則執行的。如果表達式無效,bash 會列印一條指示失敗的消息,並且不會發生替換。