我看到有些人在寫bash腳本時,在if else陳述句中定義區域變數,就像例子1一樣
。例子1:
#!/bin/bash
function ok( ) {
local animal
if [ ${A} ]; then
動物="zebra"
fi
echo "$animal"。
}
A=真
確定
對于另一個例子,這也是一樣的:
例子2:#!/bin/bash
function ok( ) {
if [ ${A} ]; then
local animal
animal="zebra"。
fi
echo "$animal"。
}
A=真
確定
因此,上面的例子列印出了相同的結果,但哪一個才是最好的做法。我更喜歡例子2,但我看到很多人在函式中宣告區域變數,如例子1。像下面這樣在頂部宣告所有的區域變數是否更好呢?
function ok( ) {
# 所有區域變數的宣告必須在這里。
# 下一個陳述句。
}
uj5u.com熱心網友回復:
區域命令將宣告的變數約束在函式范圍內。
說到這里,你可以推斷出在if塊內這樣做和在if塊外這樣做是一樣的,只要它是在一個函式內。
uj5u.com熱心網友回復:
需要遵循的最佳實踐
用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范圍最佳做法
一般來說,盡可能使用最小的范圍。讓東西彼此靠近。把
local放在靠近變數用途的地方。(這就像C或C 的規則一樣,要定義一個靠近其用途的變數,但與C或C 不同的是,在Shell中宣告和賦值應該是在不同的行上)。注意,你的例子是不一樣的。在變數
A(或a)為空字串的情況下,第一個版本將列印一個空行(本地animal變數為空),第二個版本將列印全域變數animal的值(沒有local)。雖然范圍應該是最小的,但animal是在if之外使用的--所以local也應該是在外面。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/324767.html
標籤:
上一篇:終端有兩個括號內的環境
