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

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

ABCHOME=/root/abc
export ABCHOME

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

echo $ABCHOME
/root/abc

echo ${ABCHOME}
/root/abc

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

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

bash environment-variables
1个回答
3
投票

我们一次拿一个命令:

echo $ABCHOME

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

echo "$ABCHOME"

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

使用{ }

echo ${ABCHOME}

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

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

使用$( )

echo $(ABCHOME)

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

bash: ABCHOME: command not found

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

© www.soinside.com 2019 - 2024. All rights reserved.