i=0
if [$i -eq 0]
then
echo "i is equal to 0"
else
echo "NOT EQUAL <><><><><><><><><><><><><><><><><><><>"
fi
これはbashスクリプトの一部であり、常にelseブランチをとります。私は完全にbashにそのようなおそらく何か愚かな新しいです誰かがなぜこれがうまくいかないのか理解してくれるかもしれませんか?
i=0
if [$i -eq 0]
then
echo "i is equal to 0"
else
echo "NOT EQUAL <><><><><><><><><><><><><><><><><><><>"
fi
これはbashスクリプトの一部であり、常にelseブランチをとります。私は完全にbashにそのようなおそらく何か愚かな新しいです誰かがなぜこれがうまくいかないのか理解してくれるかもしれませんか?
あなたは[$i
の代わりに[ $i
が必要です。
これは、が組み込みコマンドであり、$i
が最初のパラメータである必要があるためです。コマンドとパラメータの間にスペースがない場合、シェルは[$i
コマンドを検索し、実行後には[0
コマンドが実行されていないと評価します。
があります。私はそれをこのように書く傾向があります "if [$ x comp $ y]; then"私は私のことが好き、そして同じ行に好きです。 – MJB
いいえ、 '[' 'は組み込みコマンドではありません:' test'コマンドへの(sym)リンクです。実際、 'test'と' [''の間の唯一の違いは、 '['形式は最後の引数として ']'を必要とすることです;)あなたのシェルで 'which ['を試してみてください。 – fge
@fge:シェルの実装に依存します。古いOSではシンボリックリンクだった。すべての現代のシェルにはそのような組み込み関数があります。参照するには 'type 'を実行してください。 –
'['と ']の前にスペースが必要です。 '['はコマンドです。
'[$ i -eq 0]'の代わりに '((i == 0))' – potong