O bash
shell expande parâmetros não definidos para a string vazia por padrão. No entanto, não consigo encontrar documentação oficial afirmando isso em lugar nenhum. É?
O bash
shell expande parâmetros não definidos para a string vazia por padrão. No entanto, não consigo encontrar documentação oficial afirmando isso em lugar nenhum. É?
Em
man bash
, você pode encontrar o seguinte em "Divisão de palavras":Claro:
2.6.2 Expansão de Parâmetros
(ênfase minha)
O próprio manual de referência do Bash parece omitir o "se houver" .
Ok, talvez isso não esteja muito claro, mas o texto POSIX tem um exemplo que mostra o comportamento. É uma seção "informativa" apenas, no entanto.
(
$ab
é indefinido ali e se expande para a string vazia)O mais próximo que conheço é o que me parece uma implicação difícil de
set -u
:Então, se você tiver que ativar uma opção para tratar a expansão de uma variável não definida como um erro, parece-me que só há uma alternativa sensata para quando essa opção não estiver definida: expandir uma variável sem valor definido resulta em nenhum valor expandido.
re a ideia dos comentários de expandir variáveis não definidas para
null
, e de longa, longa experiência: não. O propósito principal do shell é construir invocações de comando, conjuntos de strings para passar paraexecve
, começando em oneliners. Ultrapassar seu terreno natural de cinco linhas é bem fácil (porque foi considerado conveniente não ter que trocar de idioma) e o que você procura já está disponível para qualquer um que queira , em praticamente qualquer formato que você queira. Quer erros reais?set -u
. Quer variáveis não definidas para expandir paranull
?${var-null}
. Há um monte de opções quase literais sobre como tratar isso.