转义命令参数以便在 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}'"