次の違いを説明してもらえますか?
echo ${hostname};
そしてecho $(hostname);
echo ${hostname};
- 何も表示せず、空行のみが表示されます。
echo $(hostname);
- /etc/hostnameの情報を表示します。
Ubuntu 22.04.1とCentOS 7でテストされました。
答え1
${hostname}
または$hostname
として知られているパラメータ拡張、シェル変数の値がここに提供されますhostname
。設定されていない可能性があるため、空の文字列が取得され、拡張子が引用されていないため、トークン化中に削除されます。しかし、もちろんこれを定義することができ、Bashは自動的にHOSTNAME
ホスト名で大文字を入力します。
たとえば、参照してください。$VAR対${VAR}と引用
$ hostname=foo
$ echo "$hostname"
foo
$(hostname)
~と呼ばれるコマンドの置き換え、ここではコマンドを実行しhostname
て出力を提供します。
$ hostname
ulpukka
$ foo=$(hostname)
$ echo "$foo"
ulpukka
単語の区切りは、引用符のないパラメータの拡張とコマンドの置換に機能します。Bashで$(コマンドを置き換える)内で引用そしていつ二重引用符が必要ですか?