Bash 局部变量作用域最佳实践
Bash local variable scope best practice
我看到有些人在编写 bash 脚本时会在 if else 语句中定义局部变量,例如示例 1
示例 1:
#!/bin/bash
function ok() {
local animal
if [ ${A} ]; then
animal="zebra"
fi
echo "$animal"
}
A=true
ok
再举个例子,这个也是一样的:
示例 2:
#!/bin/bash
function ok() {
if [ ${A} ]; then
local animal
animal="zebra"
fi
echo "$animal"
}
A=true
ok
因此,上面的示例打印了相同的结果,但最好遵循哪一个。我更喜欢示例 2,但我看到很多人像示例 1 一样在函数内声明局部变量。像下面这样在顶部声明所有局部变量会更好吗:
function ok() {
# all local variable declaration must be here
# Next statement
}
the best practice to follow
使用 https://shellcheck.net 检查您的脚本。
引用变量扩展。不要$var
,做"$var"
。 https://mywiki.wooledge.org/Quotes
脚本局部变量更喜欢使用小写变量A=true
。更喜欢为导出的变量使用大写和非常独特的名称。
不要使用 function name()
。使用 name()
。 https://wiki.bash-hackers.org/scripting/obsolete
记录全局变量的用法a=true
。或者在使用变量 local a;
然后 a=true
之前添加本地。 https://google.github.io/styleguide/shellguide.html#s4.2-function-comments
scope best practice
通常,使用尽可能小的范围。让东西彼此靠近。将 local
放在变量用法附近。 (这类似于 C 或 C++ 到 define a variable close to its usage 的规则,但与 C 或 C++ 不同的是,在 shell 中,声明和赋值应该在不同的行上)。
注意你的例子不一样。在变量A
(或a
)为空字符串的情况下,第一个版本将打印一个空行(本地animal
变量为空),第二个版本将打印值全局变量 animal
(没有 local
)。虽然范围应该是最小的,但是 animal
在 if
之外使用 - 所以 local
也应该在外面。
局部命令约束声明到函数作用域的变量.
话虽如此,您可以推断在 if 块内执行此操作与在其外部执行此操作一样,只要它在函数内部即可。
我看到有些人在编写 bash 脚本时会在 if else 语句中定义局部变量,例如示例 1
示例 1:
#!/bin/bash
function ok() {
local animal
if [ ${A} ]; then
animal="zebra"
fi
echo "$animal"
}
A=true
ok
再举个例子,这个也是一样的:
示例 2:
#!/bin/bash
function ok() {
if [ ${A} ]; then
local animal
animal="zebra"
fi
echo "$animal"
}
A=true
ok
因此,上面的示例打印了相同的结果,但最好遵循哪一个。我更喜欢示例 2,但我看到很多人像示例 1 一样在函数内声明局部变量。像下面这样在顶部声明所有局部变量会更好吗:
function ok() {
# all local variable declaration must be here
# Next statement
}
the best practice to follow
使用 https://shellcheck.net 检查您的脚本。
引用变量扩展。不要$var
,做"$var"
。 https://mywiki.wooledge.org/Quotes
脚本局部变量更喜欢使用小写变量A=true
。更喜欢为导出的变量使用大写和非常独特的名称。
不要使用 function name()
。使用 name()
。 https://wiki.bash-hackers.org/scripting/obsolete
记录全局变量的用法a=true
。或者在使用变量 local a;
然后 a=true
之前添加本地。 https://google.github.io/styleguide/shellguide.html#s4.2-function-comments
scope best practice
通常,使用尽可能小的范围。让东西彼此靠近。将 local
放在变量用法附近。 (这类似于 C 或 C++ 到 define a variable close to its usage 的规则,但与 C 或 C++ 不同的是,在 shell 中,声明和赋值应该在不同的行上)。
注意你的例子不一样。在变量A
(或a
)为空字符串的情况下,第一个版本将打印一个空行(本地animal
变量为空),第二个版本将打印值全局变量 animal
(没有 local
)。虽然范围应该是最小的,但是 animal
在 if
之外使用 - 所以 local
也应该在外面。
局部命令约束声明到函数作用域的变量.
话虽如此,您可以推断在 if 块内执行此操作与在其外部执行此操作一样,只要它在函数内部即可。