[ .. ]
segue as mesmas regras que todos os outros comandos, ou seja, Divisão de palavras . Se OUT
estiver vazio (ou não definido), $OUT
será expandido para nada, nem mesmo um argumento vazio.
Então, [ -n $OUT ]
expande para [
, -n
e ]
e [
testa se -n
não é uma string vazia. É, então o teste retorna verdadeiro.
Você precisa citar $OUT
, como em quase todo lugar:
if [ -n "$OUT" ]; then ...
Veja: Quando é necessário fazer uma cotação dupla? e Testes e condicionais no BashGuide.