他スレで -z とか見て思い出したんだけどさ
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?

[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし