Bash

Bash中變數替換中的反斜杠

  • January 22, 2018

我正在編寫一個 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工作方式相同,引號結束變數名。如果沒有其他原因,我認為這是因為當變數展開時引號仍然存在,並且\"'在變數名中沒有一個是有效的。

標准文本說:

擴詞順序如下:

  1. …,參數擴展(參見參數擴展),…

  2. 報價刪除(請參閱報價刪除)應始終最後執行。

“引號刪除”是實際刪除引號字元的步驟。

但是,正如@tomasz在他們的回答中所說,在變數名周圍加上大括號是通常的做法,所以"${x}b",或"${devName}3"。您幾乎總是希望在展開式周圍加上引號,請參閱何時需要雙引號?

(不過,我想知道是否有其他方法可以在程序中標記帶引號的字元串,而不是實際將引號字元留在原處。)

引用自:https://unix.stackexchange.com/questions/418398