-bash: 予期しないトークン `;' の近くに構文エラーがあります

-bash: 予期しないトークン `;' の近くに構文エラーがあります

if then の正しい形式は何ですか?
いろいろ試してみました。
プログラム内ではなくコマンド ラインでこの形式は機能するのでしょうか?

$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'

答え1

まだ誰もそのエラーを説明していません。

あなたが入りました:

if [1==2] then echo "y" fi;
;

最初の行は、シェルに関する限り完全に有効な構文でした。次の形式です。

if cmd args

この場合、cmdは glob の展開から派生します[1==2]。は、名前が、、 の[1==2]いずれかの文字で構成される現在のディレクトリ内のファイルのリストに展開される globbing パターンです。1=2

たとえば、2現在のディレクトリに というファイルがある場合、次のようになります。

2 の場合は echo fi;

つまり、ステートメントの部分の最初のコマンドとして、、、2の 4 つの引数を指定してコマンドを実行します。2thenechofiifif/then/elif/else/fi

エラーは 2 行目の 2 番目から発生します。コマンド ラインに;2 番目だけを入力すると、同じエラー メッセージが表示されるはずです。はコマンドを区切るために使用する必要があり、このように単独で使用することはできません。;;

答え2

bash構文の正しい形式if

if something; then command; fi

あなたがしようとしていることの正しい形は

if [ 2 -eq 2 ]; then echo "y"; fi;

bash ではスペースが重要です。

答え3

これを試してみてください:

if [ 1 == 2 ]; then echo "y" ; fi

-eq1 と 2 を文字列として比較する場合を除き、を使用する方が適切です。

便利なリンク:http://tldp.org/LDP/Bash-初心者ガイド/html/sect_07_01.html

答え4

この==演算子は Bash には存在しません。-eq数値を比較する場合、または=文字列を比較する場合に使用されます。

if [ 1 -eq 2 ]; then echo 'y'; fi

関連情報