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.