3 回答

TA貢獻1772條經驗 獲得超5個贊
這不是bash中的約定(或更常見的是POSIX系列shell)。
至于“為什么”,這是因為各種錯誤的處理方式都具有作為命令的有效含義。如果您進行NUM2 = 4了賦值,那么您必須=在不加引號的情況下將其作為文字參數傳遞。因此,任何此類更改都將是向后不兼容的,而不是放在未定義的空間中(需要保留POSIX sh標準的擴展,以避免構成對該標準的違反)。
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貢獻1806條經驗 獲得超8個贊
在Bash中,函數以空格分隔的單詞形式傳遞參數。
從文檔中
“每個運算符和操作數必須是一個單獨的參數?!?/p>
變量分配不同,并使用此語法 name=[value]
之所以不能在等號兩邊加上引號,是因為bash會將其解釋為命令。

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