rsync 和 bash 命令替换

rsync 和 bash 命令替换

尝试让脚本正确使用变量。(下面的示例是在命令行上,但我在脚本内部看到完全相同的行为#!/bin/bash

$ FLAGS='--rsh="ssh -2"'
$ rsync $FLAGS foo bar
rsync: -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)

因此我添加了引号。

$ rsync "$FLAGS" foo bar

现在它工作正常了。好的。现在让我们向变量添加更多标志$FLAGS。(我尝试只使用“-r”和“-p”,结果相同,所以我认为这与我传递的特定单连字符标志无关。)

$ FLAGS='-rptvlCR --rsh="ssh -2"'
$ rsync $FLAGS foo bar
rsync: -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
$ rsync "$FLAGS" foo bar
rsync: -rptvlCR --rsh="ssh -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
$ 

请注意,在第二种情况下,它将整个参数视为 rsync 的单个选项。

基本命令(手动输入,不使用$FLAGS变量)可以正常工作。

有任何想法吗?

有什么想法吗?我已经阅读了所有我能找到的 bash 脚本文档,但我不明白为什么 rsync 有时会忽略双引号并将其视为-2"单个标记。

答案1

把它们放入一个数组中:

FLAGS=( '-rptvlCR' '--rsh="ssh -2"' )
rsync "${FLAGS[@]}"

此 Bash 常见问题解答更多详细信息

相关内容