我有一组生成整数表达式的管道命令。一个示例看起来(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
允许在算术扩展中扩展双引号标识符的版本。