Estou escrevendo um script que usa rsync e exclui arquivos com base em determinadas configurações. Eu acabo com um sinalizador de exclusão que tem um formato de --exclude={foo, bar, baz}
.
No entanto, ao tentar expandi-lo dentro do rsync
comando, notei que o sinalizador escapou. No depurador bash, posso ver meu comando de rsync $excludes
se torna rsync '--exclude={foo,bar,baz}'
, em vez do esperado rsync --exclude={foo,bar,baz}
. Fazendo alguns testes, descobri que qualquer string contendo =
, {
ou }
será colocada entre aspas simples quando expandida. Além de usar eval em uma string construída, existe uma maneira de contornar isso?
A expansão da chave não ocorrerá quando cotada. Você também deve armazenar argumentos em uma matriz em vez de uma variável (quando possível).
Acho que o seguinte deve funcionar para você:
Se você quer dizer a
xtrace
saída (set -x
), ele realmente gosta de exibir argumentos entre aspas simples quando eles contêm caracteres especiais. A saída está em um formato que pode ser usado como entrada para o shell.Isso não significa que as aspas fazem parte da string.
Comparar:
Embora, até onde eu possa ver, não se preocupe em citar strings contendo o sinal de igual.