在 linux shell 函数中声明局部变量必须使用 local 关键字,且仅限函数内部;local 声明的变量作用域限定于当前函数,退出后自动销毁,避免全局污染,等号两侧不可有空格,支持多变量声明如 local a=1 b="hello"。

在 Linux Shell 函数中声明局部变量,核心是使用 local 关键字,且必须在函数内部使用。它能确保变量只在当前函数作用域内有效,退出函数后自动销毁,避免污染全局命名空间。
必须用 local 显式声明
Shell 中函数内的变量默认是全局的——哪怕你在函数里写 name=value,这个变量也会泄漏到函数外。要真正隔离,必须加 local:
-
local var=value:等号两边不能有空格 -
local a=1 b="hello" c:支持一次声明多个,未赋值的变量为空字符串 - 若在函数外部误写
local,bash 通常会报错或静默忽略,所以不要在全局作用域用它
典型写法与效果对比
看一个清晰例子:
#!/bin/bash
msg="I'm global"
<p>myfunc() {
local msg="I'm local"
echo "Inside: $msg" # 输出 I'm local
}</p><p>myfunc
echo "Outside: $msg" # 输出 I'm global(不受影响)
</p>
同名变量在函数内被 local 声明后,就完全屏蔽了外部同名变量,两者互不干扰。
实用建议
- 习惯在函数开头集中声明所有局部变量,逻辑更清晰、不易遗漏
- 对传入参数做局部拷贝再处理,比如
local input="$1",避免意外修改原始参数 - 如果变量只是临时计算用(如循环计数器),也应声明为
local,防止和脚本其他部分冲突
注意常见陷阱
以下写法都是错误或危险的:
-
local var = "value":等号前后有空格 → 语法错误 -
local var; var="value":第二行赋值时已脱离local作用,变成全局变量 - 在函数外写
local x=1:行为不可靠,不同 shell 实现可能报错或忽略











