Linux Shell函数封装核心是用位置参数传参,通过$1、$2等访问,支持function关键字或括号式定义,调用时按序传递并引号包裹含空格参数,用$#校验个数、$@安全转发,建议local声明变量、参数检查及echo返回结果。

Linux Shell 中函数封装的核心是把常用逻辑打包成可复用的模块,而位置参数是最基础、最直接的传参方式。定义函数时不需要声明形参,调用时把值按顺序写在函数名后面,函数体内通过 $1、$2 等访问即可。
两种标准定义方式
函数必须先定义、后调用,位置参数自动按顺序映射:
-
带 function 关键字(更清晰):
function greet { echo "Hello, $1! You are $2 years old."; } -
括号式(更常用):
greet() { echo "Hello, $1! You are $2 years old."; }
调用时传入位置参数
调用时把实参紧跟函数名,空格分隔, 接收第一个, 接收第二个,依此类推:
-
greet Alice 28→ 输出:Hello, Alice! You are 28 years old. -
greet "Bob Smith" 35→ 注意:含空格的值要用引号包裹,否则$1只拿到Bob,$2拿到Smith
获取参数数量与安全处理
用内置变量辅助判断和容错:
-
$#返回传入参数个数,适合做参数校验:if [ $# -ne 2 ]; then echo "Error: need exactly 2 arguments"; return 1; fi -
$@表示所有参数,每个参数独立(推荐用于转发):log_wrapper() { echo "[$(date)]: $@"; }<br>log_wrapper "backup started" "disk /dev/sdb1" -
$*把所有参数拼成单个字符串(一般少用,易出错)
实际封装建议
封装函数时注意实用性与健壮性:
- 用
local声明内部变量,避免污染全局环境 - 对关键参数做非空或格式检查(比如用
[[ -z "$1" ]]判空) - 不依赖
return传计算结果(受限于 0–255),改用echo+$(...)捕获输出更灵活 - 函数名建议小写+下划线,避免和系统命令冲突


















