linux shell函数通过$1、$2等传参,用return返回0–255状态码($?获取),用echo输出数据并由$(...)捕获;二者互不干扰,可同时使用。

Linux Shell 函数不支持传统编程语言那种“返回数据”的方式,它向外传递信息靠两套独立机制:传参用 $1、$2…,返回则分“状态”和“数据”两种路径——一个走 return(存进 $?),一个走 echo(靠命令替换捕获)。
怎么给函数传参数
调用函数时紧跟的值,会按顺序变成函数内部的 $1、$2……
-
$1表示第一个参数,$2是第二个,以此类推;第 10 个及以上必须写成${10}、${11},否则会被当成$10(即$1后跟字符 0) -
$#给出参数总个数,$@把所有参数展开为独立字符串(推荐用于遍历),$*则把全部参数拼成一个字符串(中间用空格连接) - 函数里直接用
$1就能取值,不需要声明形参,也不检查类型或个数——传错或少传,变量就为空,脚本不会报错,但逻辑可能出问题
怎么让函数返回状态码(成功/失败)
这是 Shell 函数最原生的“返回”,本质是退出状态,只能是 0–255 的整数,0 表示成功,非 0 表示失败。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 用
return n显式指定,比如return 0或return 1 - 没写
return时,函数自动返回最后一条命令的退出状态(例如ls /xxx失败了,整个函数就返回非 0) - 调用后立刻用
$?获取结果,且只能取一次——下一条命令执行后,$?就被覆盖了
怎么让函数返回实际数据(比如计算结果)
Shell 函数不能直接“返回字符串或数字”,但可以用 echo 输出内容,再用 $(...) 捕获。
- 函数体里用
echo "hello"或echo $((a + b))输出你想传递的值 - 调用时写成
result=$(myfunc arg1 arg2),result变量就会存住echo的输出 - 注意:
return和echo互不干扰——你可以同时用:用return表达执行是否成功,用echo送出具体结果
常见组合用法示例
比如写一个安全取最大值的函数:
max_of_two() {
if [ "$1" -gt "$2" ]; then
echo "$1"
return 0
else
echo "$2"
return 0
fi
}
<p>val=$(max_of_two 15 8)
echo "较大值是:$val" # 输出:较大值是:15
if [ $? -eq 0 ]; then # 注意:这里 $? 是 echo 的状态,不是函数 return 的!要立刻在 $(...) 后读
echo "取值成功"
fi</p>
真正想判断函数是否成功,得在调用后立刻查 $?,或者改用子 shell 方式隔离:
max_of_two() {
[ "$1" -gt "$2" ] && { echo "$1"; return 0; } || { echo "$2"; return 0; }
}
result=$(max_of_two 15 8)
ret_code=$? # 必须紧接上一行,否则被覆盖
echo "$result, 状态码:$ret_code"










