Basicamente, você deve duplicar as expansões de variáveis para protegê-las da divisão de palavras (e geração de nome de arquivo). No entanto, no seu exemplo,
wget_options='--mirror --no-host-directories'
wget $wget_options --directory_prefix="$local_root" "$remote_root$relative_path"
A divisão de palavras é exatamente o que você quer .
Com "$wget_options"
(cotado), wget
não sabe o que fazer com o único argumento --mirror --no-host-directories
e reclama
wget: unknown option -- mirror --no-host-directories
Para wget
para ver as duas opções --mirror
e --no-host-directories
como separadas, a divisão de palavras deve ocorrer.
Existem maneiras mais robustas de fazer isso. Se você estiver usando bash
ou qualquer outro shell que use matrizes como bash
do, consulte a resposta de glenn jackman . A resposta de Gilles também descreve uma solução alternativa para shells mais simples, como o padrão /bin/sh
.
Pergunta relacionada com boas respostas: Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais?
Duplicar expansões variáveis é uma boa regra prática. Faça isso . Então esteja ciente dos poucos casos em que você não deveria fazer isso. Eles se apresentarão a você por meio de mensagens de diagnóstico, como a mensagem de erro acima.
Existem também alguns casos em que você não precisa > para citar expansões variáveis. Mas é mais fácil continuar usando aspas duplas, já que não faz muita diferença. Um desses casos é
variable=$other_variable
Outra é
case $variable in
...) ... ;;
esac