さらにいろいろ試してみましたが
変数の内容がオプションと解釈されてしまって真偽値に影響がでるケースとして

hoge='-e unknown'
[ $hoge ] || echo null

とやってみるとhogeは空でも未定義でもないのに
nullと表示されてしまい、本来の意図とは違う結果になるようです

ただこれも解決方法があり
[ "$hoge" ] || echo null
とすれば意図したテストができるようです
もとより[[を使えば引用符もいらないみたいですね
[ ]の中で変数を二重引用符で囲むのは常識(?)のようなので
やはり-nや-zの必要性がない気がします

[[が無い時代(そんな時代があるのか知りませんが)の産物なんですかね