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

时间:2018-01-31 01:07:47

标签: bash environment-variables

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

ABCHOME=/root/abc
export ABCHOME

当我在终端输入以下命令时,它响应如下:

echo $ABCHOME
/root/abc

echo ${ABCHOME}
/root/abc

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

为什么第三个命令没有给我答案/root/abc

1 个答案:

答案 0 :(得分:3)

让我们一次拿一个命令:

echo $ABCHOME

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

echo "$ABCHOME"

注意:双引号不单。与括号一样,不同的引号字符有不同的用途。

使用{ }

echo ${ABCHOME}

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

大括号,${ }还会在变量名后跟冒号:/等特殊字符时引入其他变量扩展语法。这对你来说可能太先进了,把它放在你的清单上供以后学习。

使用$( )

echo $(ABCHOME)

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

bash: ABCHOME: command not found

作为一般规则,在任何编程语言中,如果没有想到,就无法交换括号。 Bash语法可能很复杂且不直观。按照教程(有很多可用的)。一定要玩,但使用man bash页面来发现您正在使用的语法。