1.06.1基礎
hostnameコマンドの標準出力を実行時に取得し、NODE_NAMEへ代入する。
Bashで適切な記述はどれか。
× 不正解
$(command)はコマンド置換で、コマンドの標準出力から末尾の改行を除いて展開する。
詳細解説
誤り
NODE_NAME='hostname'単一引用内の文字列hostnameを代入し、コマンドを実行しない。
単一引用符はhostnameを固定文字列として保つ。NODE_NAMEの値はhostnameとなり、実際のホスト名を取得しない。
誤り
NODE_NAME=hostname引用のない文字列hostnameを代入するだけである。
代入右辺のhostnameはコマンド位置にないため実行されず、その文字列が値になる。
正しい
NODE_NAME=$(hostname)hostnameを実行し、その標準出力を代入値として使う。
$(hostname)はhostnameを実行し、標準出力を代入値として展開する。実行時のノード名をNODE_NAMEへ保存できる。
誤り
NODE_NAME=${hostname}hostnameという変数を展開し、コマンドを実行しない。
${hostname}はシェル変数hostnameの値を展開する構文である。外部コマンドhostnameの実行とは無関係である。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'NODE_NAME=$(printf "node-a\n"); printf "<%s>\n" "$NODE_NAME"'期待される結果
<node-a>理解のポイント
- $()はコマンド置換
- 標準出力を展開
- 末尾改行は除去
確認時の注意
- 確認環境: GNU Bash 5.2 / 状態変更なし
- 置換結果を1つの引数として扱う場合は"$(command)"のように引用する。
基礎のおさらい
$(command)
括弧内をサブシェル環境で実行し、その標準出力を置換結果として使う。
末尾改行
コマンド置換は出力末尾に連続する改行を削除する。内部の改行は引用方法により保持される。
問題IDKL-102-905
確認環境GNU Bash 5.2 / 状態変更なし
最終技術確認2026-08-13
誤り・権利侵害を報告