return仅用于返回0–255状态码表示成功或失败,不能传递字符串或运算结果;需用echo或printf输出数据,并通过$()捕获。

Linux Shell函数中,return 专门用于返回执行状态码(即退出状态),它不传递数据值,只表示成功或失败——0 表示成功,1–255 表示各类错误。
return 的本质和限制
return 是 Bash 内置命令,只能在函数体内使用;它不会输出任何内容到标准输出,也不会影响调用方变量的值。它的唯一作用是设置函数退出时的 $? 值。
- return 后面跟一个整数(0–255),该数成为函数的退出状态码
- 如果不写 return,函数默认以最后一条命令的退出状态作为整体状态码
- return 一旦执行,函数立即终止,后续命令不再运行
如何正确使用 return 判断逻辑分支
常见做法是用条件判断决定 return 值,让调用方通过 $? 检查结果:
- 校验输入参数:参数缺失、类型不符、权限不足等情况,统一 return 1、2、3 等不同码便于区分
- 调用外部命令后检查其状态:如
ls "$dir"失败时,紧接着return 2 - 避免直接用 return 返回业务数据(比如文件名、数字结果),那不是它的设计用途
搭配 $? 实现状态检查
调用函数后必须立刻读取 $?,否则会被下一条命令覆盖:
myfunc "test"; if [ $? -eq 0 ]; then echo "ok"; fi- 更简洁写法:
if myfunc "test"; then echo "success"; else echo "failed"; fi(Bash 自动把函数退出码当作条件判断依据) - 注意:不能写成
ret=$?; if [ $ret -eq 0 ]后再执行其他命令——中间任何命令都会改写 $?
别混淆 return 和 echo
return 和 echo 是两套机制:
-
return 42→ 函数退出状态为 42,$?变成 42,但无输出 -
echo 42→ 输出字符串 "42" 到 stdout,可被val=$(myfunc)捕获,而 $? 是 echo 命令本身的退出码(通常是 0) - 想同时反馈状态和数据?常用组合:
echo "result"; return 0,调用方用out=$(func)获取输出,并用$?判断是否成功


















