2010-10-13 34 views
16

如果我有一個包含未轉義美元符號的變量,是否有任何方法可以回顯變量的全部內容?如何在bash中回顯包含未轉義美元符號的變量

例如一些調用的腳本:

./script.sh "test1$test2"

,然後,如果我想使用的參數,它被 「截斷」,例如:

echo ${1}
test1

當然單中引用可變名稱並沒有幫助。我無法弄清楚如何引用它,這樣一旦腳本收到參數,我至少可以逃脫美元符號。

回答

7

該變量在腳本運行之前被替換。

./script.sh 'test1$test2' 
+0

是的,這似乎是這種情況:) – Not22 2010-10-13 13:17:50

+0

還有其他情況下,雖然我實際上有非轉義美元符號的變量,就像我正在從文件中讀取數據時一樣。然後我想用這些數據調用我的腳本,所以在閱讀它之前,我是唯一選擇sed整個文件的選項嗎? – Not22 2010-10-13 13:22:54

+1

從文件讀取數據不會執行變量替換。 – 2010-10-13 13:26:07

28

的問題是,腳本接收在第一位置「測試1」,它不可能知道,有一個空的(未公佈的)變量的引用。你必須將它傳遞給腳本,這樣才逃離$

./script.sh "test1\$test2" 

或者使用單引號'這樣的:

./script.sh 'test1$test2' 

在這種情況下,bash將不會從參數字符串擴展變量。

0

正如Ignacio告訴你的,該變量已被替換,因此您的腳本獲取./script.sh test1作爲$0$1的值。

但即使在您使用文字引號傳遞參數的情況下,您總是在您的echo "${1}"中引用"$1"。這是一個很好的做法。

+0

大括號*不是必需的,因爲這是一個簡單的替換。 – 2010-10-13 12:38:53

+0

是的,他們不需要。使用它們只是可選的。 – Benoit 2010-10-13 12:44:53

4

通過使用單引號,像$這樣的元字符將保留其文字值。如果使用雙引號,變量名將被內插。

相關問題