我想从这样的变量传递一个参数到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
变量中的选项完全被忽略.
在变量扩展之后,唯一的处理是字拆分和通配符扩展(如果变量在双引号内,这些都不会完成),而不是引用处理.如果要重做命令行解析的所有步骤,则需要使用eval:
原文链接:https://www.f2er.com/bash/385178.htmleval "rsync $MYOPTS 192.168.0.1:/a /a"