我在~/.bashrc
中设置了一个变量:
ABCHOME=/root/abc
export ABCHOME
当我在终端输入以下命令时,它响应如下:
echo $ABCHOME
/root/abc
echo ${ABCHOME}
/root/abc
echo $(ABCHOME)
bash: ABCHOME: command not found...
为什么第三个命令没有给我答案/root/abc
?
答案 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
页面来发现您正在使用的语法。