Je réponds peut-être à coté, mais,
,
Il me semble que tout ce qui est test avec un seul crochet '[ ... ]' est compatible posix, donc dispo un peu partout. Les tests avec double '[[ ... ]]' eux ne sont pas présent dans tout les shells.
On ne teste pas l'existence d'une variable en tant que tel, mais plutôt si elle contient quelque chose:
-n STRING
the length of STRING is nonzero
-z STRING
the length of STRING is zero
,une variable "non déclarée" étant toujours égal à un chaîne de longueur nulle. (Enfin, moi je fais comme ça... )