使用变量

时间:2018-06-09 16:30:00

标签: bash ubuntu rsync

我有以下for循环,循环遍历所有需要复制的给定源。

for i in "${sources[@]}"; do
    exclude="--exclude 'exclude_folder/exclude_file'"

    rsync -az $exclude $i $destination
done

但是,排除选项无效。

for i in "${sources[@]}"; do
    exclude="--exclude 'exclude_folder/exclude_file'"

    rsync -az "$exclude" "$i" "$destination"
done

如果我使用上面的代码,rsync将退出并给出一个错误,它是一个未知的选项。

如果我只是使用以下代码,它可以工作,但我想使用一个变量作为exclude选项。

for i in "${sources[@]}"; do
    rsync -az --exclude 'exclude_folder/exclude_file' $i $destination
done

2 个答案:

答案 0 :(得分:0)

要排除的示例列表目录(也是野外图):

#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
rsync -az --exclude /$d/ .....
done

答案 1 :(得分:-1)

我会使用eval

您的代码:

for i in "${sources[@]}"; do
    exclude="--exclude 'exclude_folder/exclude_file'"

    rsync -az "$exclude" "$i" "$destination"
done
然后

(我试图尽可能接近你的逻辑):

for i in "${sources[@]}"; do
    exclude="--exclude 'exclude_folder/exclude_file'"
    rsync_command="rsync -az $exclude $i $destination"

    eval rsync_command
done

来自eval手册页:

  

EVAL

     

评估几个命令/参数

     

语法         eval [arguments]

     

将参数连接在一起成为一个命令   然后读取并执行,退出状态作为退出返回   评估状态。如果没有参数或只有空参数,那么   退货状态为零。

     

eval是一个POSIX`特殊'内置

修改

戈登戴维森对eval中的错误/不安全感是正确的。如果有任何其他解决方案可用,那么最好使用它。这里的bash数组更好。阵列答案是最好的答案。

请在 Bash: need help passing a a variable to rsync

上查看答案