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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash中$ VAR $ {VAR}和$(VAR)之间有什么区别? [重复]相关的知识,希望对你有一定的参考价值。

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

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

ABCHOME=/root/abc
export ABCHOME

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

echo $ABCHOME
/root/abc

echo ${ABCHOME}
/root/abc

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

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

答案

我们一次拿一个命令:

echo $ABCHOME

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

echo "$ABCHOME"

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

使用{ }

echo ${ABCHOME}

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

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

使用$( )

echo $(ABCHOME)

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

bash: ABCHOME: command not found

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

以上是关于bash中$ VAR $ {VAR}和$(VAR)之间有什么区别? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Bash 中测试非零长度字符串: [ -n "$var" ] 或 [ "$var" ]

$var?中bash变量参数扩展中的问号是啥意思?

bash:裁剪字符串 ${var:3:2}

Bash 取消声明只读变量(声明 -r var)

bash变量

Bash数组