2016-06-24 4 views
3

私は入力値をそのまま返すbashスクリプトメソッドを持っています。しかし、戻り値は常に256のモジュロ値です。私はしばらくの間グーグルで見つかったthisという記事は、モジュロ256(私がすでに推測していたもの)だと言っていましたが、理由を説明しませんでした。誰かがなぜこれを行うのかについていくつかの光を当てることができますか?Bashメソッドの戻り値は常にモジュロです256

var=$1 
hello() { 
    return $var 
} 
hello 

ret=$? 
echo $ret 

>>> ./script 300 
>>> 44 
+1

[POSIX準拠のため](http://pubs.opengroup.org/onlinepubs/009695399/functions/exit.html)。 –

+1

おそらくより直接的には、 'WEXITSTATUS()'マクロを参照するPOSIX [Shell Command Langauge](http://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html)仕様のセクション2.8.2 ['wait()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html)関数での使用のために文書化されています。後者は、それが提供する終了ステータスは 'exit()'または '_Exit()'に渡される値の下位8ビットであることを明示しています。 –

+1

'return'文は、関数の戻り値として任意のデータを返すためのものではありません。 1バイトの終了ステータスを設定するのは* only *です。シェル関数は実際には通常の意味で関数ではありません – chepner

答えて

3

戻り値は1バイト(8ビット)に制限されています。整数から最下位バイトを取ることは、モジュロ256(2^8)と等価です。

+0

私の質問は*なぜ*ですか。戻り値に1バイトの制限があるのはなぜですか? – th3an0maly

+0

理由は、下位ビットがオペレーティングシステムの障害のために予約されているためです。プログラムを強制終了し、戻り値を確認してください。通常、仕様にはあまり意味のない言葉がありますが、bash(1)のマニュアルページに来たら、それを見つけることができます。 –

関連する問題