關于 Linux Bash Shell 中變量的 5 個易錯點
Linux 中的 Bash 腳本語言支持對變量的操作。但是,如果您從事過其他流行的編程語言開發,那么使用 Bash 處理變量會很容易出錯。因為它的語法與其他語法不同(甚至對某些開發人員來說有點奇怪)。
這篇文章會根據我的經驗給你5個友情提示。閱讀后,它可以幫助您避免不必要的錯誤。
0. 等號周圍沒有空格
對于許多語言,例如 Python,在等號周圍添加空格是一個好習慣,因為它可以提高代碼的可讀性。
但是在 Bash 中,你不應該在定義變量時添加額外的空格。
如果我聲明一個變量?name
,如下:
這里會有一個錯誤:
如上所示,Bash 將?name
?視為命令而不是變量,因為我添加了不必要的空格。
因此,定義變量的正確方法如下:
1.正確地定義數組
在 Bash 中定義一個數組并不難。我們只需要使用一對括號來包含所有元素,如下例所示:
俗話說得好,“細節決定成敗"。我之前在編寫 Bash 腳本時犯了一個嚴重的錯誤。我習慣性地使用逗號(而非空格)來分隔數組中的每個元素。
Bash 不會將逗號視為分隔符,并且在?names
?數組中只有一個元素?Yang,Elon,Bill
?而不是預期的三個。
2.正確選擇引號
當我們在 Bash 中聲明一個變量時,關于引號的使用有 3 個可選的方案:
-
沒有引號 -
用單引號 -
用雙引號
默認情況下,Bash 中的每個值都是一個字符串。因此,如果不需要空格,我們就不需要使用任何引號。(同樣,它與其他語言有些不同,在其他語言中,您不能在沒有引號的情況下定義字符串)
當您需要使用引號時,請注意單引號和雙引號之間的區別。
例如,讓我們聲明 3 個變量,如下所示。那么,truth1
?和?truth2
?有什么區別呢?
如果你打印它們,你會看到?truth1
?是?${name} is amazing.
。而?truth2
?是?Yang is amazing.
。
總而言之,一對單引號內的字符串將始終被解釋為它的本身。
3. 避免在命令中使用反引號
在 Bash 中,我們可以將命令的結果保存到變量中。有兩種可能的方法來做到這一點:
-
variable=`command`
-
variable=$(command)
例如,要保存?ls
?命令的結果,我們可以這樣寫:
或者
但是,這里的最佳實踐始終是使用第二種方法,尤其是在編寫較長的腳本時。因為反引號和單引號看起來很相似,有時你可能會混淆它們。
4. 避免使用特殊名稱
一些名稱在 Linux 中被預定義為環境變量,如?USER
、HOME
、PATH
?等。我們可以使用?printenv
?命令列出它們。
顯然,我們不應該用與環境變量相同的名稱來聲明我們的變量。
好消息是 Linux 中所有的環境變量都是用大寫字母寫的,所以我們可以用小寫字母來自定義變量,以區別環境變量。這是一個好習慣。
鏈接:https://medium.com/techtofreedom/5-bug-prone-points-about-variables-in-linux-bash-scripting-61a777d152a
(版權歸原作者所有,侵刪)