![为什么“$(())”命令的输出是0?](https://linux22.com/image/189623/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9C%24(())%E2%80%9D%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%E6%98%AF0%EF%BC%9F.png)
我使用了该$(())
命令,并看到了此错误:
bash: 0: command not found
为什么会出现这个错误?
答案1
这$(( ))
是算术替换或算术展开。在其中,您可以执行(整数)算术运算,shell 将执行它们并用这些运算的结果替换整个表达式。
你经常看到它像这样使用
count=$(( count + 1 ))
由于 shell 在此无需执行任何操作(算术替换为空),因此您的bash
shell 决定结果为零。
您将其用作命令,这意味着 shell 将尝试将结果 ,0
作为命令运行。
它失败了,并告诉您原因(“0:找不到命令”)。
这是一个空的算术替换,似乎是一个在不同 shell 中以不同方式处理的极端情况。 shellbash
与zsh
and pdksh
(ksh
在 OpenBSD 上)一起尝试执行0
, whiledash
和yash
抱怨:
$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing
这POSIX标准说
作为扩展,shell 可以识别超出列出的算术表达式。
...这可能是bash
,zsh
和pdksh
的作用(即,它们将空表达式识别为“零”)。