質問: 件名の通りシェルスクリプトの特殊変数「$?」について質問があります。 「$?」は直前実行したコマンドの終了値(0は成功、1は失敗)という認識なのですが、 インターネットでは場合によっては他の値もあると書いてありました。 下記がその、URLです。 http://shellscript.sunone.me/exit_status.html#%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%A8%E3%81%AF また、以前シェルスクリプトで下記の様な書き方をしていたのを見た記憶があります。 ``` if [ $? -eq 2 ] ``` この2はどのような意味を持っているのでしょうか。 どなたか分かる方教えてください。
回答: 終了ステータスはコマンド(プログラム)ごとに意味を自由に設定できます。 伝統的に、`0`が「成功」、`0`以外が「失敗など」です。 それを前提にshの文法が出来ています(`if` `while` `until` `&&` `||`)。 例えば、`man grep`を見ると、 > > 通常、パターンにマッチした行が見つかった場合は 0 を、見つからなかった場 > > 合 は 1 を返します。(ただし、 -v オプションを指定した場合は、逆になりま > > す。) パターンに文法エラーが存在したり、入力ファイルにアクセスできな い > > などのシステムエラーが発生した場合は、2 を返します。 > > > と書いてあります。 つまり、 `0`:見つかった `1`:見つからない `2`:検索失敗 ですね。 「今の時刻の秒を終了ステータスとして返す」というコマンドを作るのも自由です。 ``` #!/bin/bash exit `date +%S` ```