【发布时间】:2019-06-02 18:33:42
【问题描述】:
#!/usr/bin/env bash
# set -x
readonly err_code=256
my_function () {
return $err_code
}
my_function
echo $? # print 0
如果err_code超过255,所有的最高位都会像unsigned byte一样被丢弃,这怎么解释?有没有这方面的功能文档?我在 Google 上搜索了很多,但运气不佳。
谢谢!
更新:
好的,我明白了,它不仅发生在 shell 中,而且发生在基于 Unix 的系统中,shell 函数也被命令替换调用。 感谢您提供相关问题!
【问题讨论】:
-
它不仅发生在 shell 中,而且发生在基于 Unix 的系统中 - 不,你误会了。单字节限制是 UNIX 系统上的 process 退出状态,正确。 function 的返回值仅作为单个字节是 shell 的一个特性。 UNIX(或其他地方)上的大多数语言都允许从内部函数返回其他对象类型。
-
@cdarke 我明白了,python 和 javascript 不包括在内。
-
不仅仅是
python和 javascript、C、C++、perl、ruby、C#、Java,都可以有函数/方法/子例程返回更复杂的对象,而不仅仅是一个字节。但是除了 UNIX 上的无符号字节之外,他们都不能以任何方式退出他们的进程。顺便说一句,在 Windows 上,进程可以以 32 位 int 退出,这可能会导致可移植性问题。
标签: bash macos function shell return