Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash变量中带--filter的rsync命令_Bash_Variables_Rsync_Quoting - Fatal编程技术网

bash变量中带--filter的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/

这类似于我在stackoverflow上看到的其他几个rsync bash变量问题,但这些答案都没有解决我的具体问题。我希望在bash脚本中运行以下命令,但变量中包含rsync选项:

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/

就这样。我很高兴看到我在两个字符之内就完成了这项工作谢谢