bash中$VAR${VAR}和$(VAR)之间的区别是什么?

bash中$VAR${VAR}和$(VAR)之间的区别是什么?,bash,environment-variables,Bash,Environment Variables,我在~/.bashrc中设置了一个变量: ABCHOME=/root/abc export ABCHOME 当我在终端中输入以下命令时,它的响应如下: echo $ABCHOME /root/abc echo ${ABCHOME} /root/abc echo $(ABCHOME) bash: ABCHOME: command not found... 为什么第三个命令不给我答案呢?让我们一次执行一个命令: echo $ABCHOME $是一个一元运算符,表示要进行扩展(或“替换”(如

我在
~/.bashrc
中设置了一个变量:

ABCHOME=/root/abc
export ABCHOME
当我在终端中输入以下命令时,它的响应如下:

echo $ABCHOME
/root/abc

echo ${ABCHOME}
/root/abc

echo $(ABCHOME)
bash: ABCHOME: command not found...

为什么第三个命令不给我答案呢?

让我们一次执行一个命令:

echo $ABCHOME
$
是一个一元运算符,表示要进行扩展(或“替换”(如果愿意)。没有括号,它给出了后面变量的值。如果变量值包含空格,则该空格将用作命令的参数分隔符,因此我建议:

echo "$ABCHOME"
注意:双引号不是单引号。与方括号一样,不同的引号字符有不同的用途

使用
{}

echo ${ABCHOME}
在没有其他字符的情况下,大括号用于在嵌入其他文本时分隔变量名,并且很少需要大括号(尽管它们是良性的)。例如:
echo“$ABCHOMEandaway”
将失败,但
echo“${ABCHOME}andaway”
将在值文本中附加“andaway”。带引号的建议也适用于此处

大括号,
${}
还引入了其他变量扩展语法,当变量名后面跟一个特殊字符,如冒号
/
。这对你现在来说可能太高级了,把它放在你的清单上,以后再学习

使用
$()

此扩展是命令替换,其中运行括号内指定的命令,捕获标准输出并返回到脚本。当然,没有名为
ABCHOME
的命令,因此您可以得到:

bash: ABCHOME: command not found

一般来说,在任何编程语言中,括号都不能在没有考虑的情况下进行交换。Bash语法可能很复杂且不直观。遵循教程(有很多可用的)。一定要玩,但是使用
manbash
页面来发现您使用的语法。

这是因为
$(..)
用于运行命令,而不是查看变量…为什么?为什么每种语法的行为都应该相同?
bash: ABCHOME: command not found