以下/bin/shがbashであるという前提でコメントしてみます(※)。
[[ 式 ]]
と記述した場合の意味はmanを参照すると次のように書いてありました。
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the
conditional expression expression. ...
Word splitting and pathname expansion are not performed on the
words between the [[ and ]]; tilde expansion, parameter and
variable expansion, arithmetic expansion, command substitution,
process substitution, and quote removal are performed. ...
-- man bash より --
[[ ]]
の内側ではパス名の展開は行われないとのことです。ゆえに[[ -e * ]]
の意味は「アスタリスク1文字の名前のファイルが存在するか?」という意味になると思います。
おそらく質問者さんの意図は「*というパターンのファイルが一つ以上存在するか?」ということではないでしょうか?もしそうならば[[ -e * ]]
ではなく違う手段を工夫すべきだろうと思います。
例えばファイルとして存在しているかを確認するなら
bash
1files=`find ディレクトリー -depth 1 -type f -name '*' 2>/dev/null`
2if [ -z "$files" ] ; then
3 あった
4else
5 なかった
6fi
とか・・・
※: #!/bin/sh
#!/bin/sh
と行頭に記述するとそれは「borne shellでも動くスクリプト」という意味合いを込めてで書くことが多いと思います。しかしif [[...]]
という記述は少なくともbashでは使えますがborne shellでは使えないような気がします。(違ってたらすみません)
実際の環境によって/bin/shがどのシェルになっているかは違うと思うのでもし/bin/shがbashであればif [[...]]
という記述も動くと思います。
実際のところあなたの環境の/bin/shが一体どのシェルなのか自分にはわかりません。Ubuntuではdashかも知れませんし、Windowsのcygwinだとbashだったりします・・・
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。