NB: embora a pergunta abaixo apresente rsync , não é uma pergunta sobre rsync ; é uma questão sobre matrizes zsh.
Se eu inicializar a variável EXCLUDES como esta
EXCLUDES=( --exclude=/foo --exclude=/bar --exclude=/baz )
então, quando eu executo o comando
rsync -a $EXCLUDES / /some/target
... então, vejo que /foo , /bar e /baz não são realmente copiados para /some/target .
Mas agora, suponha que EXCLUDE_ITEMS seja algo assim
EXCLUDE_ITEMS=( /foo /bar /baz )
... e inicializo EXCLUDE assim
EXCLUDES=()
for item in $EXCLUDE_ITEMS
do
EXCLUDES+=( "--exclude='$item'" )
done
... ou assim
EXCLUDES=( $(for item in $EXCLUDE_ITEMS; do echo "--exclude='$item'"; done) )
... então, em qualquer caso, depois que eu corro
rsync -a $EXCLUDES / /some/target
... agora eu descubro que os diretórios excluídos não foram excluídos da transferência.
Como as linhas de comando (conforme digitadas no terminal) são todas idênticas, devo concluir que existe uma diferença entre o EXCLUDES explicitamente inicializado daqueles que são inicializados pela iteração acima de EXCLUDE_ITEMS , mas não consigo descobrir o que é isso.
Como posso inicializar EXCLUDE dos itens em EXCLUDE_ITEMS para que o último seja excluído quando eu executo
rsync -a $EXCLUDES / /some/target
PS: Na verdade, se eu corro
eval "rsync -a $EXCLUDES / /some/target"
... onde EXCLUDES foi inicializado em qualquer uma das formas for -loop-based mostradas acima, então os diretórios nomeados em EXCLUDES são de fato excluídos, conforme desejado.