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