1.06.1標準
pwdの出力をbasenameへ渡し、現在のディレクトリ名だけをCURRENT_DIRへ保存する。
入れ子の対応が明確な構文を使う。
適切な記述はどれか。
× 不正解
$()は対応する括弧が明確で入れ子にできる。内側の置換結果を引用して外側のコマンドへ渡す。
詳細解説
誤り
CURRENT_DIR='basename pwd'固定文字列を代入し、どちらのコマンドも実行しない。
単一引用された内容は固定文字列のまま代入される。pwdもbasenameも実行されない。
誤り
CURRENT_DIR=$(pwd basename)pwdへbasenameを引数として渡す形になり、処理順が異なる。
この構文は括弧内全体を1コマンドとして扱い、pwdへbasenameを引数として渡す。2段階の処理順にならない。
誤り
CURRENT_DIR=${basename ${pwd}}変数展開としても有効な入れ子構文ではない。
${...}はパラメータ展開用であり、この形でコマンドを入れ子実行できない。有効なBash構文にもならない。
正しい
CURRENT_DIR=$(basename "$(pwd)")内側のpwd出力を外側のbasenameへ引数として渡す。
内側の$(pwd)が現在パスを出力し、引用された結果をbasenameが受け取る。外側の置換結果がCURRENT_DIRへ代入される。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'cd /tmp; CURRENT_DIR=$(basename "$(pwd)"); printf "%s\n" "$CURRENT_DIR"'期待される結果
tmp理解のポイント
- $()は入れ子可能
- 内側から評価
- 置換結果を引用
確認時の注意
- 確認環境: GNU Bash 5.2 / /tmpへ移動する一時シェル
- basenameの結果はルートディレクトリなど入力条件によって表示が異なる。
基礎のおさらい
内側から評価
入れ子のコマンド置換は内側の結果を外側のコマンドへ渡して段階的に評価する。
置換結果の引用
パスに空白などが含まれても1引数として渡すには、"$(pwd)"のように二重引用する。
問題IDKL-102-906
確認環境GNU Bash 5.2 / /tmpへ移動する一時シェル
最終技術確認2026-08-13
誤り・権利侵害を報告