bash变量中带--filter的rsync命令
这类似于我在stackoverflow上看到的其他几个rsync bash变量问题,但这些答案都没有解决我的具体问题。我希望在bash脚本中运行以下命令,但变量中包含rsync选项:bash变量中带--filter的rsync命令,bash,variables,rsync,quoting,Bash,Variables,Rsync,Quoting,这类似于我在stackoverflow上看到的其他几个rsync bash变量问题,但这些答案都没有解决我的具体问题。我希望在bash脚本中运行以下命令,但变量中包含rsync选项: rsync -ahz --delete --filter=': .rsync-filter' source/ destination/ 我注意到bash实际上将其解释为: + rsync -ahz --delete '--filter=: .rsync-filter' source/ destination/
rsync -ahz --delete --filter=': .rsync-filter' source/ destination/
我注意到bash实际上将其解释为:
+ rsync -ahz --delete '--filter=: .rsync-filter' source/ destination/
在rsync中也可以正常工作
当我尝试将这些值放入变量时,我看到正在运行以下命令:
RSYNCOPTS="-ahz --delete --filter=: .rsync-filter"
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter=: .rsync-filter'
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/
unexpected end of filter rule: :
RSYNCOPTS="-ahz --delete --filter=': .rsync-filter'"
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter='\'': .rsync-filter'\'''
+ rsync -ahz --delete '--filter='\'':' '.rsync-filter'\''' source/ destination/
Unknown filter rule: `':'
RSYNCOPTS="-ahz --delete '--filter=: .rsync-filter'"
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete '\''--filter=: .rsync-filter'\'''
+ rsync -ahz --delete ''\''--filter=:' '.rsync-filter'\''' source/ destination/
Unexpected local arg: .rsync-filter'
RSYNCOPTS='-ahz --delete --filter=: .rsync-filter'
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter=: .rsync-filter'
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/
unexpected end of filter rule: :
RSYNCOPTS='-ahz --delete --filter=": .rsync-filter"'
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter=": .rsync-filter"'
+ rsync -ahz --delete '--filter=":' '.rsync-filter"' source/ destination/
Unknown filter rule: `":'
RSYNCOPTS='-ahz --delete "--filter=: .rsync-filter"'
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete "--filter=: .rsync-filter"'
+ rsync -ahz --delete '"--filter=:' '.rsync-filter"' source/ destination/
Unexpected local arg: .rsync-filter"
我甚至尝试了一些数组,看看这是否有帮助:
RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter')
rsync ${RSYNCOPTS[@]} source/ destination/
+ RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter')
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/
unexpected end of filter rule: :
RSYNCOPTS=(-ahz --delete '--filter=": .rsync-filter"')
rsync ${RSYNCOPTS[@]} source/ destination/
+ RSYNCOPTS=(-ahz --delete '--filter=": .rsync-filter"')
+ rsync -ahz --delete '--filter=":' '.rsync-filter"' source/ destination/
Unknown filter rule: `":'
RSYNCOPTS=(-ahz --delete "--filter=': .rsync-filter'")
rsync ${RSYNCOPTS[@]} source/ destination/
+ RSYNCOPTS=(-ahz --delete "--filter=': .rsync-filter'")
+ rsync -ahz --delete '--filter='\'':' '.rsync-filter'\''' source/ destination/
Unknown filter rule: `':'
那么我错过了什么 使用数组方法并双引号引用数组引用:
RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter')
rsync "${RSYNCOPTS[@]}" source/ destination/
就这样。我很高兴看到我在两个字符之内就完成了这项工作谢谢