在 Linux Shell 脚本中,函数内定义局部变量必须使用 local 关键字,它仅在函数体内有效且需与赋值写在同一行(等号无空格);支持多变量声明及 -a、-A、-r、-i 等属性修饰,可避免同名全局变量被覆盖。

在 Linux Shell 脚本中,函数内部定义局部变量必须使用 local 关键字——它不是命令,而是 Bash、Zsh 等 shell 的内置关键字,专用于限制变量作用域。
必须在函数体内声明
local 只在函数内部有效,不能写在函数外或脚本顶层。否则 bash 会报错或静默忽略:
- ✅ 正确:
myfunc() { local count=0; echo $count; } - ❌ 错误:
local tmp=123(在函数外)→ 不起作用,可能报错
等号两侧不能有空格
这是常见语法错误点。local 声明和赋值要写在同一行,且 = 紧贴变量名和值:
- ✅ 正确:
local name="Alice" port=8080 - ❌ 错误:
local name = "Alice"→ 被解释为执行命令name,报“command not found” - ❌ 危险:
local var; var="hello"→ 第二行赋值使var变成全局变量
支持多变量与属性修饰
local 可一次声明多个变量,还能配合属性提升安全性:
- 数组:
local -a list=(apple banana)(局部索引数组) - 关联数组:
local -A config=([host]="localhost" [port]="22") - 只读:
local -r API_URL="https://api.example.com"(防止意外修改) - 整数:
local -i sum=0; sum+=5(确保按数值运算,而非字符串拼接)
避免同名全局变量被覆盖
不加 local 时,函数内所有赋值默认是全局的。加上后,函数内外同名变量互不影响:
msg="start"
myfunc() {
local msg="done"
echo "Inside: $msg" # 输出 done
}
myfunc
echo "Outside: $msg" # 输出 start(未被改变)


















