在bash中,何时需要在算术语句之前使用美元符号?

5

我正在努力理解bash,但在一些基本概念上遇到了困难。

我可以看到算术语句是由双括号定义的

((5-3))

但是如果我尝试 echo 它或在 shift 中使用它,就会出现错误。

echo ((5-3))
-bash: syntax error near unexpected token `('

在示例中,加上美元符号作为前缀可以让它正常工作。
echo $((5-3))

为什么会这样呢?语法看起来像是我对一个空变量进行算术运算,然后再传递给 echo 函数。为什么我不能直接将算术运算的结果传递给 echo 函数呢?在其他情况下,我如何知道何时需要在算术语句前加上美元符号?请原谅我的无知,我太习惯于Web开发语言了,而Bash则完全不同。

是的,BASH确实与Web开发语言不同。$(...)被称为命令替换。请阅读一些BASH脚本教程。 - anubhava
3个回答

6

((...))是一个算术表达式。

$((...))是算术扩展。

区别在于,表达式本身是一个单位,而扩展只是被替换为一个值。

这与以下两者之间的差异相同。

$ echo foo
foo

并且

$ $(echo foo)
-bash: foo: command not found

我会用不同的措辞来表达这个意思:((...)) 实际上是一个命令;而 $((...)) 则是一个命令的一部分。如果你把 $((5-3)) 当作一个命令使用,它会先计算结果(2),然后试图将其作为一个命令来执行(除非你碰巧有一个名为“2”的命令,否则会出现错误)。 - Gordon Davisson

2

当你需要计算并返回值时,就需要使用它


2
双括号用于告诉bash,大括号内的内容是整数,'$'符号用于显示算术运算结果或得到的整数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接