3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
這不是bash中的約定(或更常見(jiàn)的是POSIX系列shell)。
至于“為什么”,這是因?yàn)楦鞣N錯(cuò)誤的處理方式都具有作為命令的有效含義。如果您進(jìn)行NUM2 = 4了賦值,那么您必須=在不加引號(hào)的情況下將其作為文字參數(shù)傳遞。因此,任何此類更改都將是向后不兼容的,而不是放在未定義的空間中(需要保留POSIX sh標(biāo)準(zhǔn)的擴(kuò)展,以避免構(gòu)成對(duì)該標(biāo)準(zhǔn)的違反)。
NUM2= 4 # runs "4" as a command, with the environment variable NUM2 set to an empty string
NUM2 =4 # runs "NUM2" as a command, with "=4" as its argument
NUM2 = 4 # runs "NUM2" as a command, with "=" as its first argument, and "4" as another

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
在Bash中,函數(shù)以空格分隔的單詞形式傳遞參數(shù)。
從文檔中
“每個(gè)運(yùn)算符和操作數(shù)必須是一個(gè)單獨(dú)的參數(shù)?!?/p>
變量分配不同,并使用此語(yǔ)法 name=[value]
之所以不能在等號(hào)兩邊加上引號(hào),是因?yàn)閎ash會(huì)將其解釋為命令。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
原因很簡(jiǎn)單,shell的行為就是這樣。對(duì)于具有其他編程語(yǔ)言經(jīng)驗(yàn)的人來(lái)說(shuō),這可能沒(méi)有任何意義(如果您將Shell語(yǔ)法稱為“語(yǔ)言”,從某種意義上說(shuō)就是)。
Shell腳本使在許多情況下不引號(hào)成為可能(只要是單個(gè)字符串的字符序列不包含任何空格或特殊字符)。因此,您可以編寫(xiě):
my_command -n -X arg1 arg2
代替(以某種虛構(gòu)的偽代碼)
"my_command" "-n" "-X" "arg1" "arg2"
在大多數(shù)語(yǔ)言中,這是相反的方式:引用文字字符串,這可以釋放“語(yǔ)法空間”,以使用不帶任何特殊字符的變量(例如$在shell腳本中)。
Shell語(yǔ)法在很多情況下提供了便利,但是這樣做的代價(jià)是,在做其他事情時(shí),便利性(和可讀性)降低了。這既是詛咒,又是祝福。令人高興的是,如果您有一個(gè)交互式外殼,就可以100%確保您有一個(gè)可以處理某種(也許是不雅的)程序的解釋器。由于其通用性(盡管存在各種口味),所以外殼程序是一種有用的平臺(tái),值得學(xué)習(xí)。
添加回答
舉報(bào)