ifとショートサーキット

bashのtest, [内で使う-aはショートサーキットじゃないのですねえ。

echo "$1" | grep -E '^[0-9]+$' > /dev/null
if [ "$?" -eq 0 -a -n "$1" -a "$1" -gt 0 ]
then
  # ...
fi

grepした結果が一致して、空文字でなく、0より大きいって書いたらエラーが出ました。
-gtのところで空文字と0を比較してるのでエラーが出たりしてるみたいで。


-aだとダメみたいなので

echo "$1" | grep -E '^[0-9]+$' > /dev/null
if [ "$?" -eq 0 -a -n "$1" ] && [ "$1" -gt 0 ]
then
  # ...
fi

と&&を使って難を逃れたのでした。