2015-05-07 36 views
3

我是初學者到Shell腳本。Shell腳本中字符串串聯錯誤

我已經使用了一個變量來存儲值A="MyScript"。我試圖在後續步驟$A_new中連接字符串。令我驚訝的是它沒有工作,並且$A.new工作。

你能幫我理解這些細節嗎?

由於

+0

在[這個問題](http://stackoverflow.com/questions/4181703/how-can-i-concatenate-string-variables-in-bash)中的信息有幫助嗎? –

+0

@MichaelScarn雖然不是我一直在尋找,但感謝分享這樣好的信息。 – Prradep

回答

0

一個變量可以包含字母(a到z或A〜Z),數字(0到9)或下劃線字符(的名稱_)。

Shell不需要像編程語言那樣的任何變量聲明,如C,C++java。所以當你編寫$A_new shell時認爲A_new是一個變量,你沒有分配任何值,因此它變爲空值。

要實現你提到的作爲: ${A}_new

它總是一個很好的做法後$標誌括在大括號的變量名,以避免這樣的情況。

+0

謝謝@Inderdeep。感謝您的解釋。 – Prradep

3

殼牌variable names由字母字符,數字和下劃線的。

3.231名稱

在shell命令語言,從便攜字符集僅下劃線,數字和alphabetics組成的字。名字的第一個字符不是數字。

所以,當你寫$A_new shell解釋下劃線(和new)作爲變量名的一部分,並且擴大了可變A_new

一個句點在變量名中無效,因此當shell解析變量$A.new以便在該句點處停止並擴展變量A

${A}語法的設計目的是使其按照預期工作。

您可以使用任何下列正確有這個工作(以優選性的粗糙順序):

  1. echo "${A}_new"
  2. echo "$A"_new
  3. echo $A\_new

最後是最不可取因爲你不能引用整個字符串(否則\不會被刪除。因此,因爲你基本上應該總是引用你的變量擴展,你最終可能會做echo "$A"\_new,但這並沒有什麼不同,然後點2最終爲什麼要打擾。

+0

這是您的查詢的確切解釋。 您也可以通過任何提及的方式明確指定: 1. $ {A} _new 2. $ A \\ _ new –

+0

謝謝@Etan的詳細解答。它清除了我的懷疑和概念。 – Prradep

+0

謝謝@Amit的答案。 – Prradep

1

發生這種情況是因爲下劃線是變量名中的有效字符。 嘗試這種方式: $ {A} _new或 「$ A」 _new

+0

雅。 '$ A_new',實際上是'$ {A_new}'。 –

+0

你的意思是'$ {A} _new'而不是'{$ A} _new'。 –

+0

謝謝@Rajesh。我沒有得到你的陳述羅賓。 – Prradep