シェルにおける終了コードの扱い

シェルで扱うコマンドの終了コードは、その指定可能な値の範囲は8ビットの整数である。終了コードは、特殊変数「$?」にセットされる。

負の整数を指定することも可能だが、その場合、当該値を2の補数表現として解釈した値が「$?」にセットされる。その場合の「$?」は、当該値を符号無し8ビット整数として表現した値として解釈される。例えば、-1→255、-128→128など。

8ビットで表現可能な値より大きい整数が指定された場合、当該値を下位8ビットに切り捨てた値(正確には、8ビット符号無し整数で表現可能な最大値+1を法とする剰余)が「$?」にセットされる。例えば、256→0、-129→127など。

exit n hex echo $?
4294967295 0xFFFF FFFF 255
2147483648 0x8000 0000 0
2147483647 0x7FFF FFFF 255
256 0x0000 0100 0
-1 0xFFFF FFFF 255
-128 0xFFFF FF80 128
-129 0xFFFF FF7F 127

実用上、「プログラムやシェルスクリプトの終了コードには、0〜255の値を指定できる」と覚えるとよい。