在 bash 中使用括号

Usage of parenthesis in bash

我看到这个 Stack Overflow 关于在 bash 中使用括号的问题。

很好的信息,但我对如何使用括号仍有一些疑问。例如下面的代码:

#!/bin/bash
a=5
b=6
c=7
$(( d = a * b + c ))
echo "d : "$d

给我输出:

./parantheses: line 5: 37: command not found
d : 37

我对 $(( )) 的研究让我得到了这个 site,它给了我以下信息。

$(( expression ))

The expression is treated as if it were within double quotes, but a double quote inside the parentheses is not treated specially. All tokens in the expression undergo parameter expansion, command substitution, and quote removal. Arithmetic substitutions can be nested.

我不太明白:(
但我确实明白我们不必在每个变量之前使用 $ 并且变量将自动被替换。还有什么以及为什么我的脚本会抛出错误?

另外 a=$( expression ) 是做什么的?

这个也像 $(( )) 一样工作吗?

请举例说明答案,以便我更好地理解。

注:我在cygwin中运行上面的脚本。

$(( d = a * b + c ))

计算后,剩下的是一个数字,因为这是第一个单词,shell 将尝试将其作为命令执行。毫不奇怪,没有名为 37.

的命令

您可以忽略结果:

: $(( d = a * b + c ))

但最好简单地写下你的意思:

d=$(( a * b + c ))