Você precisa citar suas variáveis. Sem aspas, você está escrevendo test -n
em vez de test -n <expression>
. O comando test
não tem idéia de que você forneceu uma variável que foi expandida para nada.
Na sintaxe shell, $VARIABLE
fora das aspas duplas é o operador “split + glob”: o valor da variável é dividido em uma lista de palavras delimitadas por espaços em branco, e cada palavra é interpretada como um padrão curinga e substituída pelos nomes dos arquivos correspondentes (ou deixados sozinhos se não houver nenhum arquivo correspondente). Se o valor da variável estiver vazio, a lista de palavras após a divisão é uma lista vazia. Para obter o valor da variável sem processamento adicional, a expansão da variável precisa estar entre aspas duplas.
O motivo [[
funciona porque é uma sintaxe especial bash e não um comando; nessa sintaxe especial, $VARIABLE
significa "valor de VARIABLE
" (exceto no lado direito dos operadores de correspondência de padrão =
, ==
, !=
e =~
). Usar [
funcionaria da mesma forma que test
. O que se segue faz o que você quer:
test -n "$undeclared_variable" && echo "Foo"