1.06.2基礎
dev、test、prodをこの順で変数envへ代入し、それぞれ1回ずつprintfを実行する。
適切なループはどれか。
× 不正解
for name in words; do commands; doneはwordsを順にnameへ代入し、各要素について本体を実行する。
詳細解説
誤り
while env in dev test prod; do printf '%s\n' "$env"; donewhileは条件コマンドを必要とし、この形式で値一覧を反復しない。
whileの後には実行して成否を判定できる条件コマンドを書く。このin形式で3つの値を順に代入する構文ではない。
誤り
if env in dev test prod; then printf '%s\n' "$env"; fiifは条件分岐で、一覧の各値を反復しない。
ifは条件の終了状態によりthenやelseを一度選ぶ。固定一覧を要素数だけ反復する制御構文ではない。
誤り
case env in dev test prod) printf '%s\n' "$env";; esaccaseは1つの値をパターン分岐し、3値を順に代入しない。
caseは現在の1つの値を複数パターンと比較する。dev、test、prodをenvへ順番に設定する動作にならない。
正しい
for env in dev test prod; do printf '%s\n' "$env"; done一覧の各語をenvへ順に代入して本体を実行する。
for env in dev test prodは3語を順にenvへ代入し、その都度doからdoneまでを実行する。指定された順序で3回表示できる。
実際に確かめる
一時的な検証環境で実行できる例です。
sh -c 'for env in dev test prod; do printf "%s\n" "$env"; done'期待される結果
dev、test、prodを1行ずつ表示理解のポイント
- forは一覧反復
- inの後に値一覧
- doからdoneが本体
確認時の注意
- 確認環境: POSIX sh / 状態変更なし
基礎のおさらい
語の一覧
inの後の展開結果が反復対象になる。固定語だけでなくglobや位置引数も使える。
変数展開の引用
本体で値を1引数として利用するときは"$env"のように引用する。
問題IDKL-102-920
確認環境POSIX sh / 状態変更なし
最終技術確認2026-08-13
誤り・権利侵害を報告