2016-06-24 52 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

或者可能更直接的,POSIX [Shell Command Langauge](http://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html)規範的第2.8.2節,它引用了'WEXITSTATUS()'宏記錄爲與['wait()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html)函數一起使用。後者明確指出,它提供的退出狀態是傳遞給'exit()'或'_Exit()'的值的最低8位。 –

+1

'return'語句不是用來返回任意數據作爲函數的返回值。它僅*旨在設置一個字節的退出狀態。 Shell函數在通常意義上不是真正的函數 – chepner

回答

3

返回值限制爲1個字節(8位)。從一個整數中取最小有效字節相當於模256(2^8)。

+0

我的問題是*爲什麼*那​​是。爲什麼返回值有1個字節的限制? – th3an0maly

+0

原因是低位保留用於操作系統故障。嘗試殺死程序並查看返回值。通常情況下,specs有一些晦澀的說法,但如果你來到'bash(1)'的man page,你會發現它。 –