Bash

在 bash 中計算整數表達式

  • September 27, 2022

我有一組生成整數表達式的管道命令。一個範例看起來(1 +(0x1f+0x02)) 我可以評估這個表達式(得到結果值),通過將它括在 中$(),所以:

$ echo $((1 +(0x1f+0x02)))
34

我有興趣讓它在單個命令中工作,所以我嘗試將我的整個系列管道命令包含在 中$(),但似乎 bash 無法評估表達式。這個片段可能複制了我看到的問題:

$ TEST="(1 +(0x1f+0x02))"

$ echo "$TEST"
(1 +(0x1f+0x02))

$ echo $($TEST)
bash: (1: command not found

不知道我在這裡缺少什麼

算術擴展發生在$((...)), while$(...)是命令替換。由於沒有名為 的命令(1,它是變數值的第一個單詞,因此當 shell 嘗試在命令替換中用作命令TEST時,會從 shell 收到錯誤消息。$TEST

你可能想做

expression='(1 +(0x1f+0x02))'

echo "$(( "$expression" ))"

對於bash早於 4.4 版的版本,刪除內部雙引號集。4.4 版是第一個bash允許在算術擴展中擴展雙引號標識符的版本。

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