1.03.1標準
変数TARGETにはalpha betaという空白を含む値が入っている。
printfへ値全体を1つの引数として渡す。
適切な展開はどれか。
× 不正解
"$TARGET"は変数展開を行いつつ、結果に対する単語分割とファイル名展開を抑える。
詳細解説
誤り
printf '<%s>\n' $TARGET未引用展開では単語分割が起こり、alphaとbetaが別引数になる。
誤り。alpha betaが2語へ分割され、printfの書式が各引数へ再利用されて2行になる。
誤り
printf '<%s>\n' '$TARGET'単一引用符は変数展開を抑え、$TARGETという文字列を渡す。
誤り。単一引用符は値alpha betaではなく、6文字を含む名前表記$TARGETを渡す。
正しい
printf '<%s>\n' "$TARGET"二重引用符内で変数を展開し、結果の空白を含めて1引数に保つ。
正しい。二重引用符は値を展開しつつ、内部の空白による引数分割を抑える。
誤り
printf '<%s>\n' \$TARGETバックスラッシュで$を引用し、変数展開せず文字列$TARGETを渡す。
誤り。\$でドル記号が通常文字になるため、変数の値を参照しない。
実際に確かめる
一時的な検証環境で実行できる例です。
TARGET='alpha beta'; printf '<%s>\n' "$TARGET"期待される結果
<alpha beta>理解のポイント
- double quote内は展開
- 結果を1引数に保持
- 未引用は単語分割
確認時の注意
- 確認環境: Bash 5.x / shell builtin printf
基礎のおさらい
引数境界
シェルは展開後に外部コマンドへ文字列配列を渡すため、引用は境界を守る役割を持つ。
安全な習慣
意図的な分割が不要なら変数展開を二重引用符で囲むのが基本である。
問題IDKL-101-436
確認環境Bash 5.x / shell builtin printf
最終技術確認2026-08-13
誤り・権利侵害を報告