關(guān)于 Linux Bash Shell 中變量的五個(gè)易錯(cuò)點(diǎn)
Linux 中的 Bash 腳本語言支持對(duì)變量的操作。但是,如果您從事過其他流行的編程語言開發(fā),那么使用 Bash 處理變量會(huì)很容易出錯(cuò)。因?yàn)樗恼Z法與其他語法不同(甚至對(duì)某些開發(fā)人員來說有點(diǎn)奇怪)。
這篇文章會(huì)根據(jù)我的經(jīng)驗(yàn)給你5個(gè)友情提示。閱讀后,它可以幫助您避免不必要的錯(cuò)誤。
1. 等號(hào)周圍沒有空格
對(duì)于許多語言,例如 Python,在等號(hào)周圍添加空格是一個(gè)好習(xí)慣,因?yàn)樗梢蕴岣叽a的可讀性。
但是在 Bash 中,你不應(yīng)該在定義變量時(shí)添加額外的空格。
如果我聲明一個(gè)變量 name,如下:
name = "Yang"
這里會(huì)有一個(gè)錯(cuò)誤:
-bash: name: command not found
如上所示,Bash 將 name 視為命令而不是變量,因?yàn)槲姨砑恿瞬槐匾目崭瘛?
因此,定義變量的正確方法如下:
name="Yang"
2.正確地定義數(shù)組
在 Bash 中定義一個(gè)數(shù)組并不難。我們只需要使用一對(duì)括號(hào)來包含所有元素,如下例所示:
names=("Yang" "Elon" "Bill")
俗話說得好,“細(xì)節(jié)決定成敗"。我之前在編寫 Bash 腳本時(shí)犯了一個(gè)嚴(yán)重的錯(cuò)誤。我習(xí)慣性地使用逗號(hào)(而非空格)來分隔數(shù)組中的每個(gè)元素。
names=("Yang","Elon","Bill")
Bash 不會(huì)將逗號(hào)視為分隔符,并且在 names 數(shù)組中只有一個(gè)元素 Yang,Elon,Bill 而不是預(yù)期的三個(gè)。
3.正確選擇引號(hào)
當(dāng)我們?cè)?Bash 中聲明一個(gè)變量時(shí),關(guān)于引號(hào)的使用有 3 個(gè)可選的方案:
- 沒有引號(hào)
- 用單引號(hào)
- 用雙引號(hào)
默認(rèn)情況下,Bash 中的每個(gè)值都是一個(gè)字符串。因此,如果不需要空格,我們就不需要使用任何引號(hào)。(同樣,它與其他語言有些不同,在其他語言中,您不能在沒有引號(hào)的情況下定義字符串)
當(dāng)您需要使用引號(hào)時(shí),請(qǐng)注意單引號(hào)和雙引號(hào)之間的區(qū)別。
例如,讓我們聲明 3 個(gè)變量,如下所示。那么,truth1 和 truth2 有什么區(qū)別呢?
如果你打印它們,你會(huì)看到 truth1 是 ${name} is amazing.。而 truth2 是 Yang is amazing.。
總而言之,一對(duì)單引號(hào)內(nèi)的字符串將始終被解釋為它的本身。
4. 避免在命令中使用反引號(hào)
在 Bash 中,我們可以將命令的結(jié)果保存到變量中。有兩種可能的方法來做到這一點(diǎn):
- variable=`command`
- variable=$(command)
例如,要保存 ls 命令的結(jié)果,我們可以這樣寫:
file_list=`ls`
或者
file_list=$(ls)
但是,這里的最佳實(shí)踐始終是使用第二種方法,尤其是在編寫較長(zhǎng)的腳本時(shí)。因?yàn)榉匆?hào)和單引號(hào)看起來很相似,有時(shí)你可能會(huì)混淆它們。
5. 避免使用特殊名稱
一些名稱在 Linux 中被預(yù)定義為環(huán)境變量,如 USER、HOME、PATH 等。我們可以使用 printenv 命令列出它們。
顯然,我們不應(yīng)該用與環(huán)境變量相同的名稱來聲明我們的變量。
好消息是 Linux 中所有的環(huán)境變量都是用大寫字母寫的,所以我們可以用小寫字母來自定義變量,以區(qū)別環(huán)境變量。這是一個(gè)好習(xí)慣。