我想争论从这样的变量传递给rsync
:报价忽略
myopts='-e "ssh -p 1234" -a'
rsync $myopts 192.168.0.1:/a /a
出于某种原因,这是行不通的。我甚至发现this webpage它说,它不会工作:
### NO NO NO: this passes three strings:
### (1) "my
### (2) multiword
### (3) argument"
MYARG="\"my multiword argument\""
somecommand $MYARG
### THIS IS NOT (!!!!) THE SAME AS ###
command "my multiword argument"
### YOU NEED ###
MYARG="my multiword argument"
command "$MYARG"
遗憾的是它并没有说为什么它将无法正常工作。
包含rsync
调用的脚本被许多其他脚本使用,因此我只能以兼容的方式对其进行更改。不起作用的解决方案是使用阵列:
myopts=('-a' '-v' '-z') # new way, would work
myopts='-a -v -z' # old way, breaks
rsync "${myopts[@]}" 192.168.0.1:/a /a
变量的选项完全被忽略。
在这种特殊情况下,您可以使用'MYOPTS =“ - essh -p1234”'然后'rsync“$ MYOPTS”192.168.0.1:/a/a'。但总的来说,值得学习如何做到这一点。看到各种答案。 (我会去的阵列,但YMMV。) – rici
[我试图把一个命令在一个变量,但复杂的情况下总是失败](http://mywiki.wooledge.org/BashFAQ/050) –