我有一组生成整数表达式的管道命令。一个示例看起来(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
你可能想做
对于
bash
早于 4.4 版的版本,删除内部双引号集。4.4 版是第一个bash
允许在算术扩展中扩展双引号标识符的版本。