在 bash 中计算整数表达式

在 bash 中计算整数表达式

我有一组生成整数表达式的管道命令。一个示例看起来(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

不知道我在这里缺少什么

答案1

算术展开发生在 内$((...)),而$(...)是命令替换。由于没有名为 的命令(1(它是变量值的第一个字),因此TEST当 shell 尝试$TEST在命令替换中使用命令时,您会收到错误消息。

你可能想做

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

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

对于 4.4 之前的版本bash,请删除内部双引号集。 4.4 版是第一个bash允许在算术扩展中扩展双引号标识符的版本。

相关内容