このスクリプトで「予期しないファイルの終わり」構文エラーが発生するのはなぜですか?

このスクリプトで「予期しないファイルの終わり」構文エラーが発生するのはなぜですか?

このスクリプトの最後の行に「予期しないファイルの終わり」構文エラーが発生するのはなぜですか?

{ [ $# -ne 2 ] && [ $# -ne 3 ] } && { echo "Uso: $0 [opciones] [nlineasresultado] [archivos a analizar]" && echo "NEED 2 OR 3 PARAMETERS" && exit 1 }
echo sucessfull
exit 0

答え1

bash中かっこ(、)を使用するときの構文を示すマニュアルページを参照してください。{}

{ list; }

これは、複数のセミコロンが欠落していることを意味します。

{ [ $# -ne 2 ] && [ $# -ne 3 ]; } && { echo "Uso: $0 [opciones] [nlineasresultado] [archivos a analizar]" && echo "NEED 2 OR 3 PARAMETERS" && exit 1; }

同じ目的を達成するために改行文字を使用することもできます。つまり、これはバグです。

{ echo hello }

しかし、これはうまくいきます:

{ echo hello; }

このように:

{
echo hello
}

答え2

bashコマンドのグループ化には、閉じる中括弧の前に1つが必要です。{}なぜなら、閉じ括弧を入れていないのでエラーが発生するからです。;}

する:

{ [ $# -ne 2 ] && [ $# -ne 3 ] ;} && { echo "Uso: $0 [opciones] [nlineasresultado] \
          [archivos a analizar]" && echo "NEED 2 OR 3 PARAMETERS" && exit 1 ;}

関連情報