単純な if/else が機能しない

単純な if/else が機能しない

1 時間ほどこの問題を見てきましたが、何が問題なのかわかりません。何らかの理由で else ステートメントが機能していません。

#!/bin/bash
if [ $#=3 ]
then
echo $*
else
echo "error" 1>&2
exit
fi

答え1

問題は次の行にあります:

if [ $#=3 ]

の周囲にスペースがないので=、必然的に次のようになります。

if [ -n $#=3 ]

=3常に存在するため常に true となるテストなので、else決してトリガーされません。

=:の前後にスペースを入れる必要があります。

if [ $# = 3 ]

また、単語の分割やパス名の拡張を避けるために、変数の拡張時に二重引用符を使用しますが、これは必ずしも必要ではありません$#

関連情報