转义命令参数以便在 Bash 中重新使用?
Escape command parameters for re-use in Bash?
我想保存命令参数以便在 Bash 中的变量中重复使用。原因是它们很长,我用了很多次。
SRC_FOLDER="src folder"
DST_FOLDER="dst folder"
PARAMS="--dry-run \"$SRC_FOLDER\" \"$DST_FOLDER\""
rsync $PARAMS
问题出在 src 和 dst 文件夹中的 space。 Rsync 认为有 4 个文件夹而不是 2 个。我想我必须以某种方式转义第 3 行中的变量。
我无法转义第 1 行和第 2 行中的文件夹,因为它们可能已通过参数传递到我的 bash 脚本,而我不知道内容。
另请注意,src 和 dst 文件夹可能有其他特殊符号,如 *、$、\、"、'。
这是否可能不使用像这样的单独变量:
rsync $PARAMS "$SRC_FOLDER" "$DST_FOLDER"
有解决办法吗?
#!/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}'"
我想保存命令参数以便在 Bash 中的变量中重复使用。原因是它们很长,我用了很多次。
SRC_FOLDER="src folder"
DST_FOLDER="dst folder"
PARAMS="--dry-run \"$SRC_FOLDER\" \"$DST_FOLDER\""
rsync $PARAMS
问题出在 src 和 dst 文件夹中的 space。 Rsync 认为有 4 个文件夹而不是 2 个。我想我必须以某种方式转义第 3 行中的变量。
我无法转义第 1 行和第 2 行中的文件夹,因为它们可能已通过参数传递到我的 bash 脚本,而我不知道内容。
另请注意,src 和 dst 文件夹可能有其他特殊符号,如 *、$、\、"、'。
这是否可能不使用像这样的单独变量:
rsync $PARAMS "$SRC_FOLDER" "$DST_FOLDER"
有解决办法吗?
#!/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}'"