Shell

expr 算術中的括號:3 * (2 + 1)

  • October 6, 2021

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您應該使用((...))做算術exprlet為了易讀性。

為了可移植性,請使用$((...))@Bernhard answer 之類的。

您可以改用算術擴展。

echo "$(( 3 * ( 2 + 1 ) ))"
9

在我個人看來,這看起來比使用expr.

man bash

算術擴展 算術擴展允許對算術表達式求值並替換結果。算術展開的格式為:

         $((expression))

表達式被視為在雙引號內,但括號內的雙引號不會被特殊處理。表達式中的所有標記都經過參數擴展、字元串擴展、命令替換和引號刪除。算術擴展可以嵌套。

評估是根據以下算術評估下列出的規則執行的。如果表達式無效,bash 會列印一條指示失敗的消息,並且不會發生替換。

引用自:https://unix.stackexchange.com/questions/149823