Kal*_*Zen 20 variables bash local
我发现有些人在编写 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
 
}
Kam*_*Cuk 34
应遵循的最佳实践
使用https://shellcheck.net检查您的脚本。
引用变量扩展。不要$var,做"$var"。https://mywiki.wooledge.org/Quotes  https://www.shellcheck.net/wiki/SC2086
对于脚本局部变量,最好使用小写变量名。对于exported 变量,请使用大写且带前缀的唯一变量名称。
不使用function name()。使用name()。https://wiki.bash-hackers.org/scripting/obsolete(archive.org http://web.archive.org/web/20170123130003/http://wiki.bash-hackers.org/scripting/obsolete )。
记录全局变量的使用a=true。或者在使用变量之前添加 local local a;then a=true。https://google.github.io/styleguide/shellguide.html#s4.2-function-comments
范围最佳实践
一般来说,使用尽可能小的范围。让物品彼此靠近。靠近local变量的用法。这类似于 C 或 C++ 中的规则,定义一个接近其用法的变量,但与 C 或 C++ 中不同的是,在 shell 中本地声明和赋值应该位于单独的行上,请参阅https://www.shellcheck.net/wiki /SC2155。
请注意,您的示例并不相同。A在变量(或)是空字符串的情况下a,第一个版本将打印一个空行(局部animal变量为空),第二个版本将打印全局变量的值animal(没有local)。尽管范围应尽可能最小,animal但在外部使用if- 因此local也应在外部。