回显 ${hostname}; 与 回显 $(hostname);

回显 ${hostname}; 与 回显 $(hostname);

您能否解释一下以下之间的区别:

echo ${hostname};echo $(hostname);

echo ${hostname};- 什么都不显示,只是一个空行。 echo $(hostname);- 显示来自 /etc/hostname 的信息。

在 Ubuntu 22.04.1 和 CentOS 7 上测试

答案1

${hostname}或被$hostname称为参数扩展,这里给出了 shell 变量的值hostname。它可能未设置,因此您会得到一个空字符串,由于扩展名未加引号,因此该字符串在分词过程中会被删除。但您当然可以定义它,Bash 会自动HOSTNAME用主机名填充大写字母。

参见例如$VAR 与 ${VAR} 以及引用或不引用

$ hostname=foo
$ echo "$hostname"
foo

$(hostname)叫做命令替换,在这里它运行命令hostname并给出输出。

$ hostname
ulpukka
$ foo=$(hostname)
$ echo "$foo"
ulpukka

分词适用于不带引号的参数扩展和命令替换,请参见例如在 Bash 中的 $(命令替换) 内引用什么时候需要双引号?

相关内容