這個問題在這里已經有了答案: 為什么 bash 引數擴展會導致 rsync 命令以不同的方式運行? (2 個回答) 如何在 bash 的變數中存盤引數串列? (2 個回答) 昨天關閉。
我想保存命令引數以在 Bash 的變數中重用。原因是它們很長,我多次使用它們。
SRC_FOLDER="src folder"
DST_FOLDER="dst folder"
PARAMS="--dry-run \"$SRC_FOLDER\" \"$DST_FOLDER\""
rsync $PARAMS
問題是 src 和 dst 檔案夾中的空間。Rsync 認為有 4 個檔案夾而不是 2 個。我想我必須以某種方式轉義第 3 行中的變數。
我無法轉義第 1 行和第 2 行中的檔案夾,因為它們可能已通過引數傳遞給我的 bash 腳本,而我不知道內容。
另請注意,src 和 dst 檔案夾可能有其他特殊符號,如 *、$、\、"、'。
這是否可能不使用單獨的變數,如下所示:
rsync $PARAMS "$SRC_FOLDER" "$DST_FOLDER"
有解決辦法嗎?
uj5u.com熱心網友回復:
#!/bin/bash
rsync_args=(
--dry-run
"src folder"
"dst folder"
)
rsync "${rsync_args[@]}"
關于我在評論中提到的問題:
rsync命令中的遠程路徑會進行分詞。
下面的例子是錯誤的:
rsync -av ~/ user@server:'home backup 2021-12-04/'
你必須這樣寫:
rsync -av ~/ user@server:'home\ backup\ 2021-12-04/'
一種自動修復它的方法是:
#!/bin/bash
remote_path='home backup 2021-12-04/'
qq="'\''"
rsync -av ~/ user@server:"'${remote_path//\'/$qq}'"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373445.html
下一篇:C :尋址每個位元組
