Existe uma diferença entre:
PARMS+="... --exclude='.git'"
e
... --exclude='.git'
No primeiro, aspas simples estão dentro das próprias citações, então elas estão literalmente presentes no texto substituído dado a rsync
como argumentos. rsync
obtém um argumento cujo valor é --exclude='.git'
. No segundo, as aspas simples são interpretadas pelo shell no momento em que são escritas, porque elas não estão entre aspas e rsync
consegue ver --exclude=.git
.
Neste caso, você não precisa das aspas simples - .git
é uma palavra de shell perfeitamente válida por si só, sem caracteres especiais, então você pode usá-la literalmente no comando.
Melhor para esse tipo de coisa, no entanto, é um array :
PARMS=(-rvu)
PARMS+=(--delete --exclude='.git')
rsync "${PARMS[@]}"
Isso constrói o seu comando como palavras separadas, com qualquer citação que você queira interpretar no momento em que você escreve a linha do array. "${PARMS[@]}"
expande para cada entrada na matriz como um argumento separado , mesmo se o argumento em si tiver caracteres ou espaços especiais, então rsync
vê o que você escreveu como quis dizer.