シェルにおける終了コードの扱い
シェルで扱うコマンドの終了コードは、その指定可能な値の範囲は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の値を指定できる」と覚えるとよい。