亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么變量分配中的空格會導致Bash錯誤?

為什么變量分配中的空格會導致Bash錯誤?

#!/bin/bashdeclare -r NUM1=5NUM2 =4                # Line 4num3=$((NUM1 + NUM2))num4=$((NUM1 - NUM2))num5=$((NUM1 * NUM2))num6=$((NUM1 / NUM2))  # Line 9echo "$num3"echo $((5**2))echo $((5%4)) 我正在使用此bash腳本,當我運行該腳本時,出現錯誤./bash_help ./bash_help: line 4: NUM2: command not found./bash_help: line 9: NUM1 / NUM2: division by 0 (error token is "NUM2")5251所以我將代碼更改為此,錯誤消失了。#!/bin/bashdeclare -r NUM1=5NUM2=4num3=$((NUM1 + NUM2))num4=$((NUM1 - NUM2))num5=$((NUM1 * NUM2))num6=$((NUM1 / NUM2))echo "$num3"echo $((5**2))echo $((5%4)) 當我們給變量賦值時為什么不能使用空格?習慣上使用空格以提高代碼的可讀性。誰能解釋一下?
查看完整描述

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


查看完整回答
反對 回復 2019-11-04
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

在Bash中,函數以空格分隔的單詞形式傳遞參數。


從文檔中


“每個運算符和操作數必須是一個單獨的參數?!?/p>


變量分配不同,并使用此語法 name=[value]


之所以不能在等號兩邊加上引號,是因為bash會將其解釋為命令。


查看完整回答
反對 回復 2019-11-04
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

原因很簡單,shell的行為就是這樣。對于具有其他編程語言經驗的人來說,這可能沒有任何意義(如果您將Shell語法稱為“語言”,從某種意義上說就是)。


Shell腳本使在許多情況下不引號成為可能(只要是單個字符串的字符序列不包含任何空格或特殊字符)。因此,您可以編寫:


 my_command -n -X arg1 arg2

代替(以某種虛構的偽代碼)


 "my_command" "-n" "-X" "arg1" "arg2"

在大多數語言中,這是相反的方式:引用文字字符串,這可以釋放“語法空間”,以使用不帶任何特殊字符的變量(例如$在shell腳本中)。


Shell語法在很多情況下提供了便利,但是這樣做的代價是,在做其他事情時,便利性(和可讀性)降低了。這既是詛咒,又是祝福。令人高興的是,如果您有一個交互式外殼,就可以100%確保您有一個可以處理某種(也許是不雅的)程序的解釋器。由于其通用性(盡管存在各種口味),所以外殼程序是一種有用的平臺,值得學習。


查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 575 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號