TL, DR: Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais? . Ops, isso é ainda mais ... Bem, TL, DR reais: sempre coloque aspas duplas em torno das substituições de comando e variável. Além disso, veja o final desta resposta para um segundo problema com o seu script.
É impossível, com seu script, fazer uma expansão de variável se expandir para uma string vazia. Uma expansão de variável sem aspas passa pelo processo “expand + split + glob”:
- Pegue o valor da variável, que é uma string.
- Divida a string no espaço em branco (mais geralmente, nos caracteres que estão presentes no valor da variável
IFS
). Isso resulta em uma lista de strings (possivelmente vazia se a string original continha nada além de espaço em branco).
- Para cada elemento da lista, se ele contiver pelo menos um caractere curinga
*?\[
e o elemento for um padrão que corresponda a pelo menos um arquivo, o elemento será substituído pela lista de correspondências.
É possível que $DOMAIN_SUFFIX
seja expandido para uma lista vazia de strings, mas não para uma lista que contenha uma string vazia. A etapa de correspondência de caractere curinga não pode produzir elementos vazios, pois um nome de arquivo nunca é a cadeia vazia. A etapa de divisão não pode produzir elementos vazios com o valor padrão de IFS
, já que o separador é uma sequência de espaços em branco e leva pelo menos um caractere que não é espaço em branco para interromper uma sequência de espaços em branco. A etapa de divisão pode produzir elementos vazios se IFS
for alterado para incluir caracteres que não sejam espaços em branco, mas isso exigiria a alteração do script para modificar IFS
e não há motivos para isso.
Você precisa alterar o script e fazer com que ele use uma expansão simples de variável, em vez de usar o operador expandir + dividir + glob: coloque aspas duplas na expansão da variável.
Além disso, ${DOMAIN_SUFFIX:=.example.com}
se expande para .example.com
se o valor de DOMAIN_SUFFIX
estiver vazio. Então você nunca terá uma string vazia para isso. Para preservar o valor vazio e usar somente .example.com
se DOMAIN_SUFFIX
não estiver definido, altere o :=
para =
.
#!/bin/sh
./somecommand -s "${DOMAIN_SUFFIX=.example.com}"