シェルスクリプトよくわかんね

http://www.shido.info/misc/misc.php?id=29
を参考に、-fでファイルを対象に、-dでディレクトリを対象に再帰的にコマンドを実行するようなスクリプトを書いているのだがうまくいかない。


#! /bin/bash

function rec {
for FILE in `ls ${3}`
do
local FULL=${3}/${FILE}
echo ${FULL}
if ["$1" = "-f" ];then
if [ -f $FULL ]; then
$2 $FULL
fi
elif ["$1" = "-f"];then
if [ -d $FULL ]; then
$2 $FULL
fi
fi

#continue procedure on directory
if [ -d $FULL ]; then rec $1 $2 $FULL
fi
done
}

これだと

$ rec -f "ls" /cygdrive/e/work/ufuse3/
/cygdrive/e/work/ufuse3//ufuse
bash: [-f: command not found
bash: [-f: command not found
/cygdrive/e/work/ufuse3//ufuse/branches
bash: [-f: command not found
bash: [-f: command not found
/cygdrive/e/work/ufuse3//ufuse/tags
bash: [-f: command not found
bash: [-f: command not found
/cygdrive/e/work/ufuse3//ufuse/trunk
bash: [-f: command not found
bash: [-f: command not found
/cygdrive/e/work/ufuse3//ufuse/trunk/juFuse

てな感じで怒られる。


きっと、"$1"の部分がコマンドとして実行されてしまっているのだろうな。しかし、直そうにもただの文字列として引数を受け取る方法がわからん。
#変数置換は実行されて、コマンド実行はされないようにしたい。


だれか教えて。


#追記
hdkさんのコメントを参考に、"[]"を"test"に置き換えたら動くようになった!!
わーい。



#! /bin/bash

function rec {
for FILE in `ls ${3}`
do
local FULL=${3}/${FILE}
echo ${FULL}
if test "$1" = "-f" ;then
if [ -f $FULL ]; then
$2 $FULL
fi
elif test "$1" = "-f";then
if [ -d $FULL ]; then
$2 $FULL
fi
fi

#continue procedure on directory
if [ -d $FULL ]; then rec $1 $2 $FULL
fi
done
}

#追記2
上の追記は嘘で、[]はメソッド呼び出しなので、中のセンテンスとの間にスペースを置かなければならなかったというだけだったみたい。



#! /bin/bash

function rec {
for FILE in `ls ${3}`
do
local FULL=${3}/${FILE}
echo ${FULL}
if [ "$1" = "-f" ] ;then
if [ -f $FULL ]; then
$2 $FULL
fi
elif [ "$1" = "-d" ] ;then
if [ -d $FULL ]; then
$2 $FULL
fi
fi

#continue procedure on directory
if [ -d $FULL ]; then rec $1 $2 $FULL
fi
done
}