Bash

命令參數的 Shell 字元串轉義

  • November 5, 2014

我正在嘗試用這個創建“/tmp/pwet/foo bar”:

DIR="/tmp/pwet/foo bar"
ARGS="-p ${DIR}"
mkdir $ARGS

出於集成原因,我必須將 ARGS 建構分為 2 個步驟: ARG = some_options + $DIR 此程式碼創建 2 個目錄:/tmp/pwet/foo./bar. 這不是我想要的。

我嘗試了很多逃避的事情,但沒有結果。我用 bash 執行腳本。有什麼好的解決辦法?

問題不在於變數的內容(這就是為什麼您可以嘗試使用任意數量的轉義字元),而在於 bash 替換$ARGS為變數內容的事實,因此其中的空間將是實際的命令中的空格。

只需使用mkdir "$ARGS"(即,將變數引用包含在"s 中)

更新:如評論中所述,為了使 the-p和其他選項不屬於目錄名稱,請改為定義 2 個變數:

OPTS="-p -whatever"ARGS="/tmp/pwet/foo bar"

然後像這樣發出 mkdir :

mkdir $OPTS "$ARGS"

或者,如果您想使用轉義字元完全控制它,並且可能有多個目錄,有些帶有空格,有些沒有,選項,所有混合在一起,您可以將整個命令放在一個變數中並使用 bash -c 執行它。

檢查下面的範例作為您可以玩的起點:

MKDIRCMD="mkdir -p \"A B\" \"C D\""
echo $MKDIRCMD # Notice the \ characters are NOT part of the string
bash -c "$MKDIRCMD"

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