105.2基礎
あるコマンドを実行した直後に、その終了状態を数値で保存する。
参照する特殊パラメータはどれか。
× 不正解
$?は直前の終了状態を保持するが、次のコマンドを実行すると上書きされる。必要なら直後にstatus=$?のように保存する。
詳細解説
誤り
$$現在のシェルのPIDを返す。
誤り。$$はシェルプロセスを識別する番号であり、直前の処理が成功しても失敗してもその成否を表さない。
誤り
$#位置パラメータ数を返す。
誤り。$#は現在設定されている位置パラメータ数で、コマンド実行結果とは独立している。
正しい
$?直前に実行したパイプラインの終了状態を返す。
正しい。$?は直前のパイプラインの終了状態へ展開され、通常0が成功、0以外が失敗等を表す。
誤り
$!直近の非同期コマンドのPIDを返す。
誤り。$!は最後にバックグラウンド起動したプロセスのPIDであり、完了時の終了状態ではない。
実際に確かめる
一時的な検証環境で実行できる例です。
false; status=$?; printf '%s\n' "$status"期待される結果
1理解のポイント
- 0は成功
- 0以外は失敗等
- 直後に保存
確認時の注意
- 確認環境: GNU Bash 5.2 / Bash組込みfalse
基礎のおさらい
上書き
printf等の別コマンドを1つ実行するだけでも$?はその新しい終了状態へ変わるため、必要なら直後に保存する。
条件分岐
if COMMANDやCOMMAND && NEXTを使えば、$?を数値として明示参照せず終了状態を直接評価できる。
問題IDKP-105-624
確認環境GNU Bash 5.2 / Bash組込みfalse
最終技術確認2026-08-13
誤り・権利侵害を報告