【问题标题】:Bash method return value is always modulo 256Bash 方法返回值总是模 256
【发布时间】:2016-10-27 11:02:28
【问题描述】:

我有一个返回输入值的 bash 脚本方法。然而,返回值始终是模 256 的值。我搜索了一段时间,发现 this 文章说它总是模 256(我已经猜到了),但没有解释原因。有人能解释一下为什么会这样吗?

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

ret=$?
echo $ret

>>> ./script 300
>>> 44

【问题讨论】:

  • 或者更直接地说,POSIX Shell Command Langauge 规范的第 2.8.2 节,它引用了记录用于与 wait() 函数一起使用的 WEXITSTATUS() 宏。后者明确表示它提供的退出状态是传递给exit()_Exit() 的值的低8 位。
  • return 语句不打算将任意数据作为函数的返回值返回。 only 旨在设置一个字节的退出状态。 Shell 函数并不是通常意义上的函数
  • @gniourf_gniourf 等,感谢您的解释和链接。有人可以发布答案以便我接受它作为正确答案吗?谢谢。

标签: linux bash shell


【解决方案1】:

返回值限制为 1 个字节(8 位)。从整数中取出最低有效字节相当于模 256 (2^8)。

【讨论】:

  • 我的问题是为什么。为什么返回值有 1 个字节的限制?
  • 原因是低位是为操作系统故障保留的。尝试杀死程序并查看返回值。通常,规范有一些晦涩难懂的说法,但如果你来到 bash(1) 的手册页,你会在那里找到它。
猜你喜欢
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多