
このスクリプトの最後の行に「予期しないファイルの終わり」構文エラーが発生するのはなぜですか?
{ [ $# -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 ;}