rsync和bash命令replace

试图让脚本正确使用variables。 (下面的例子在命令行中,但是在#!/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 

现在它正常工作。 好的。 现在让我们在$FLAGSvariables中添加更多的标志。 (我只用“-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的一个选项。

基本命令(手动input而不使用$FLAGSvariables)正常工作。

有任何想法吗?

有任何想法吗? 我已经读过了我能find的所有bash脚本文档,而且我无法弄清楚为什么rsync会在某些时候忽略双引号,并将-2"作为单个标记。

把它们扔进一个数组中:

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

有关更多详细信息,请参阅此Bash FAQ