Bash
Bash中變數替換中的反斜杠
我正在編寫一個 Bash 腳本來幫助正確地對硬碟進行分區,但我遇到了一個奇怪的問題,我必須將一個數字附加到一個變數中。我花了一段時間才得到正確的結果,因為我對 Bash 不是很有經驗,但我設法做了一些臨時的事情。
這是我正在建構的範例:
#!/bin/bash devName="/dev/sda" devTarget=$devName\3 echo "$devTarget"
變數
devName
是/dev/sda
,但我還需要稍後在腳本中為第三個分區設置一個變數,所以我使用了\
符號,這讓我可以將數字添加3
到/dev/sda
以進行輸出/dev/sda3
即使
\
符號有效,我只是想知道這是否是做這樣的事情的正確方法。我之所以使用它,是因為在 Python 中它習慣於忽略引號等的以下字元,但我想在這種情況下做相反的事情,所以令人驚訝的是它起作用了。如果這不是添加變數的最佳方法,有人可以舉一個在 Bash 中執行此操作的最佳方法的範例。
將變數插入字元串的安全方法是使用
${var_name}
. 例如:#!/bin/bash devName="/dev/sda" devTarget="${devName}3" echo "$devTarget"
這樣,Bash 就不會懷疑要插入的變數是什麼。
順便說一句,有趣的是如何
devTarget=$devName\3
工作。我不確定為什麼。
$x\b
工作方式與$x"b"
或"$x"b
工作方式相同,引號結束變數名。如果沒有其他原因,我認為這是因為當變數展開時引號仍然存在,並且\"'
在變數名中沒有一個是有效的。標准文本說:
擴詞順序如下:
…,參數擴展(參見參數擴展),…
報價刪除(請參閱報價刪除)應始終最後執行。
“引號刪除”是實際刪除引號字元的步驟。
但是,正如@tomasz在他們的回答中所說,在變數名周圍加上大括號是通常的做法,所以
"${x}b"
,或"${devName}3"
。您幾乎總是希望在展開式周圍加上引號,請參閱何時需要雙引號?(不過,我想知道是否有其他方法可以在程序中標記帶引號的字元串,而不是實際將引號字元留在原處。)