条件付き構造のセミコロン


35

なぜセミコロンを1つに配置し、別のセミコロンを配置しないのですか?

結果は同じです

コード1

if [ "a" == "a" ]
then
 echo "true"
fi

コード2

if [ "a" == "a" ];
then
 echo "true";
fi

2番目のコードのセミコロンは不要ですか?

セミコロンを配置する必要がある場合


2
これは十分かつ適切に回答されましたが、OPにもそれを知らせたいと思いました。ただ代わるいかなる:あなたは例えば、1行に2つのコマンドを組み合わせることができますので、行末をsvn up; make
アーロンD. Marasco

1
また、2つのセミコロン;;を使用して、caseステートメントの一致を区切ることにも注意してください。 ;;ここでは必須であり、オプションで;;はありません.... ;またはと同じものではなく、; ;少し似ています。単一のセミコロン;は、caseステートメントのCOMMANDS部分で通常どおり機能します。
cas

回答:


31

セミコロンは、行末が欠落している場合にのみ必要です。

if [ "a" == "a" ] ; then echo "true" ; fi

セミコロンを使用しないと、構文エラーが発生します。

引用についてのあなたの質問がわかりません。もっと具体的に教えてください。

(ちなみに、の=代わりに使用する==方が移植性が高く、POSIXに準拠しています)。


2番目のコードの引用符は不要ですか?
ジョナサン

2
両方のサンプルのすべての引用符は不要です。
チョロバ

6

一部の人々(/ meなど)は次のようなスタイルを好むため、セミコロンがよく使用されます。

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

そのため、then-keywordが条件行に配置されている場合、chorobaによって記述されているように、新しいコマンドが開始されるため、必要になります。

条件チェックの引用符については、変数に何も割り当てられていない場合に例外が発生しないことを確認するために、変数と共に使用されることがよくあります。これはより安全なスタイルであり、不要なように見えますが、シェルプログラミングの場合でも、変数にコンテンツを割り当てることができませんでしたが、時々プログラムを処理していました。その後、空の文字列が比較されるため、コマンドは引き続き機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.