Linux Shell函数需先定义后调用,支持function name{...}和name(){...}两种语法,参数用$1、${10}等获取,return返回状态码,echo输出可被捕获。

在 Linux Shell 脚本中定义自定义函数,核心是把一段可复用的命令逻辑封装成有名字的代码块。它不需编译,写完就能调用,关键是位置要对、语法要准、参数要会用。
两种标准写法,效果一样
Shell 支持两种等效的函数定义格式,选一种保持统一即可:
-
推荐写法(显式 function 关键字):
function my_func { ... }—— 语义清晰,易读性强,适合团队协作或复杂脚本 -
简洁写法(无关键字):
my_func() { ... }—— 更常见于日常脚本和 Bash 社区示例,兼容性好
注意:括号 () 必须存在,哪怕里面没内容;花括号 {} 和内部命令之间至少有一个空格或换行,否则 shell 会报错。
函数必须先定义再调用
Shell 是逐行解释执行的,不像高级语言会预扫描函数声明。所以:
- 函数定义要放在调用语句之前(通常写在脚本开头或
main逻辑前) - 如果函数定义在文件末尾,而调用写在前面,运行时会提示
command not found - 可在同一脚本里定义多个函数,相互之间可以调用(支持嵌套)
传参和取参的基本规则
调用函数时跟在函数名后的所有词,都会作为位置参数传入:
-
$1到$9直接获取前九个参数 - 第 10 个及以后必须写成
${10}、${11}等(带大括号) -
$#返回参数总个数,$@表示全部参数(每个独立成项),$*把所有参数拼成单个字符串(慎用) - 含空格或特殊字符的参数,调用时必须加双引号,如
my_func "file name.txt" -v
返回值与输出的区别
函数有两种“返回”方式,用途不同,不能混用:
-
状态码返回(用
return):只能是 0–255 的整数,表示成功(0)或某种错误码;通过$?获取,常用于条件判断 -
标准输出返回(用
echo):返回任意文本或数据;用$(my_func)捕获,适合计算结果、路径、配置值等
例如:result=$(get_user_home "$USER") 就是靠 echo "/home/$USER" 输出来赋值的。


















