Tente com if $FLAG_Control && [ -d /path/to/dir ]; ...
. Observe que os colchetes não fazem parte da sintaxe de if
; Nesse caso, você deseja que $FLAG_Control
seja interpretado como um comando ( true
ou false
), e isso funcionará bem com &&
e a outra cláusula [ ... ]
. (Isso pressupõe que sua variável esteja sempre definida como true
ou false
.)
O motivo pelo qual seu teste inicial não faz o que você quis dizer pode ser visto na documentação de test
(também conhecido como [
):
-n STRING
the length of STRING is nonzero
STRING equivalent to -n STRING
Como false
não tem nenhum significado especial aqui, ele é visto simplesmente como uma string não vazia, que é interpretada como um valor verdadeiro.