您能否解释一下以下之间的区别:
echo ${hostname};
和echo $(hostname);
echo ${hostname};
- 什么都不显示,只是一个空行。
echo $(hostname);
- 显示来自 /etc/hostname 的信息。
在 Ubuntu 22.04.1 和 CentOS 7 上测试
答案1
${hostname}
或被$hostname
称为参数扩展,这里给出了 shell 变量的值hostname
。它可能未设置,因此您会得到一个空字符串,由于扩展名未加引号,因此该字符串在分词过程中会被删除。但您当然可以定义它,Bash 会自动HOSTNAME
用主机名填充大写字母。
$ hostname=foo
$ echo "$hostname"
foo
$(hostname)
叫做命令替换,在这里它运行命令hostname
并给出输出。
$ hostname
ulpukka
$ foo=$(hostname)
$ echo "$foo"
ulpukka
分词适用于不带引号的参数扩展和命令替换,请参见例如在 Bash 中的 $(命令替换) 内引用和什么时候需要双引号?