1.06.2基礎
check_readyコマンドが成功した場合だけ、readyと表示する。
終了状態をifの条件として直接使う。
適切な記述はどれか。
× 不正解
if COMMAND; then ...; fiはCOMMANDの終了状態が0ならthen節を実行する。$?を別途比較する必要はない。
詳細解説
誤り
if $? check_ready; then echo ready; fi$?をコマンド名の前へ置く構文ではない。
$?は数値へ展開される特殊パラメータで、後ろのcheck_readyを判定するコマンド名にはならない。ifの条件位置へcheck_readyを直接置く。
誤り
if echo ready; then check_ready; fi表示の成功を条件にしてからcheck_readyを実行する逆順である。
先にecho readyを条件として実行するため、通常は表示後にcheck_readyへ進む。検査成功時だけ表示するという順序が逆である。
正しい
if check_ready; then echo ready; ficheck_readyの終了状態が0の場合にthen節を実行する。
ifはcheck_readyを実行し、その終了状態が0ならthen節のechoを実行する。コマンドの成否を直接分岐条件にできる。
誤り
if check_ready; do echo ready; doneifはthenとfiを使い、doとdoneはループ用である。
if文はthenで処理節を始めfiで閉じる。doとdoneは反復構文の本体用なので構文として一致しない。
実際に確かめる
一時的な検証環境で実行できる例です。
sh -c 'check_ready() { return 0; }; if check_ready; then echo ready; fi'期待される結果
ready理解のポイント
- ifは終了状態を判定
- 0ならthen
- 条件コマンドを直接置く
確認時の注意
- 確認環境: POSIX sh / 一時関数
基礎のおさらい
0が真
ifでは終了状態0を真としてthen節へ進み、非0ならelifまたはelseへ進む。
testもコマンド
[ expression ]も終了状態を返すコマンドなので、一般のコマンドと同じ位置へ置ける。
問題IDKL-102-927
確認環境POSIX sh / 一時関数
最終技術確認2026-08-13
誤り・権利侵害を報告