Shell函数用return返回0–255状态码标识执行结果,0表示成功,非0表示不同错误;需在函数内使用,外部通过$?、if或&&/||捕获判断,不可与echo混淆。

Shell函数通过 return 返回 0–255 的整数作为退出状态码,外部脚本可用 $? 或直接在 if、&&、|| 中判断该状态,从而控制流程。注意:return 只能用于函数内,且返回值非“输出内容”,而是执行结果的逻辑标识。
return 的取值范围和约定含义
Shell 中 return 后跟的数字会被截断为 0–255(超出部分取模),推荐只用 0 表示成功,1–255 表示不同类型的失败。POSIX 和 Bash 社区普遍遵循:
- 0:操作成功
- 非0(如 1、2、10、100):表示特定错误,便于下游脚本区分问题类型
在函数中正确使用 return
函数内部遇到错误时,应尽早 return 错误码;成功路径末尾可显式 return 0(也可省略,默认返回最后一条命令的退出状态)。例如:
check_file() {
local file="$1"
[[ -z "$file" ]] && { echo "Error: no file given"; return 10; }
[[ -f "$file" ]] || { echo "Error: '$file' not found or not a regular file"; return 2; }
[[ -r "$file" ]] || { echo "Error: '$file' not readable"; return 3; }
return 0
}外部脚本如何捕获并响应状态码
调用函数后,立即检查其退出状态——不要执行其他命令再查 $?,否则会覆盖原值。常用方式有:
- 用
if直接判断:if check_file "/etc/passwd"; then echo "OK"; else echo "Failed"; fi - 用
&&/||链式执行:check_file "/tmp/log" && process_log || cleanup - 显式保存并分析:
check_file "$target"; status=$?; case $status in 0) handle_ok;; 2) handle_missing;; 3) handle_no_read;; *) handle_unknown;; esac
避免常见误区
return 不是 echo:它不向标准输出打印内容,也不传递数据;若需返回字符串,请用命令替换($(func))配合 echo。
不能在非函数上下文中用 return:在主脚本顶层或 sourced 脚本中直接写 return 会报错或退出当前 shell。
别依赖未声明的返回值:函数末尾无 return 时,返回值是最后一条命令的退出状态,易被忽略导致逻辑意外。

















