我是初學者到Shell腳本。Shell腳本中字符串串聯錯誤
我已經使用了一個變量來存儲值A="MyScript"
。我試圖在後續步驟$A_new
中連接字符串。令我驚訝的是它沒有工作,並且$A.new
工作。
你能幫我理解這些細節嗎?
由於
我是初學者到Shell腳本。Shell腳本中字符串串聯錯誤
我已經使用了一個變量來存儲值A="MyScript"
。我試圖在後續步驟$A_new
中連接字符串。令我驚訝的是它沒有工作,並且$A.new
工作。
你能幫我理解這些細節嗎?
由於
一個變量可以包含字母(a到z或A〜Z),數字(0到9)或下劃線字符(的名稱_)。
Shell不需要像編程語言那樣的任何變量聲明,如C
,C++
或java
。所以當你編寫$A_new
shell時認爲A_new
是一個變量,你沒有分配任何值,因此它變爲空值。
要實現你提到的作爲: ${A}_new
它總是一個很好的做法後$
標誌括在大括號的變量名,以避免這樣的情況。
謝謝@Inderdeep。感謝您的解釋。 – Prradep
殼牌variable names由字母字符,數字和下劃線的。
3.231名稱
在shell命令語言,從便攜字符集僅下劃線,數字和alphabetics組成的字。名字的第一個字符不是數字。
所以,當你寫$A_new
shell解釋下劃線(和new
)作爲變量名的一部分,並且擴大了可變A_new
。
一個句點在變量名中無效,因此當shell解析變量$A.new
以便在該句點處停止並擴展變量A
。
${A}
語法的設計目的是使其按照預期工作。
您可以使用任何下列正確有這個工作(以優選性的粗糙順序):
echo "${A}_new"
echo "$A"_new
echo $A\_new
最後是最不可取因爲你不能引用整個字符串(否則\
不會被刪除。因此,因爲你基本上應該總是引用你的變量擴展,你最終可能會做echo "$A"\_new
,但這並沒有什麼不同,然後點2最終爲什麼要打擾。
發生這種情況是因爲下劃線是變量名中的有效字符。 嘗試這種方式: $ {A} _new或 「$ A」 _new
雅。 '$ A_new',實際上是'$ {A_new}'。 –
你的意思是'$ {A} _new'而不是'{$ A} _new'。 –
謝謝@Rajesh。我沒有得到你的陳述羅賓。 – Prradep
在[這個問題](http://stackoverflow.com/questions/4181703/how-can-i-concatenate-string-variables-in-bash)中的信息有幫助嗎? –
@MichaelScarn雖然不是我一直在尋找,但感謝分享這樣好的信息。 – Prradep