web-dev-qa-db-ja.com

シェルスクリプトの行末でセミコロンは不要ですか?

次を含むシェルスクリプトがあります。

case $1 in
    0 )
    echo $1 = 0;
    OUTPUT=3;;
    1 )
    echo $1 = 1;
    OUTPUT=4;;
    2 )
    echo $1 = 2;
    OUTPUT=4;;
esac

HID=$2;
BUNCH=16;
LR=.008;

セミコロンは上記のスニペットで完全に不要ですか?そして、一部の人々がダブルセミコロンを使用する理由はありますか?

セミコロンは単なる改行であり、改行の代わりに使用するもののようです。

87
Nagel

改行もコマンドの区切り文字であるため、行末の単一のセミコロンは不要です。 caseでは、各パターンブロックの最後のコマンドの最後にダブルセミコロンが特に必要です。見る help case 詳細については。

132

man bashによると:

  metacharacter
         A character that, when unquoted, separates words.  One of the following:
         |  & ; ( ) < > space tab
  control operator
         A token that performs a control function.  It is one of the following symbols:
         || & && ; ;; ( ) | |& <newline>

したがって、;はメタ文字または制御演算子にできますが、;;は常に制御演算子です(コマンドの場合)。

特定のコードでは、行末のすべての;は必要ありません。ただし、;;が必要です。

27
Michał Šrajer

Findの特殊なケースでは、; -execによって呼び出されたコマンドを終了するために使用されます。これに対する@kenorbの回答を参照してください question

4
DanielGKiel

@ Opensourcebook-Amit

ターミナルまたはシェルスクリプトの単一のセミコロン(;)と同等の改行。

以下の例を参照してください。

端末で:[root @ server test]#ls; pwd;


シェルスクリプトの場合:

[root @ server test]#cat test4.sh

echo "現在のユーザー名:" whoami

echo -e "\ n現在の日付:";日付;

[root @ serverテスト]#

しかし、&は改行またはセミコロンと同等であるというコメントに同意しません

&はバックグラウンドでコマンドを実行しますが、コマンドセパレーターでもありますが、セミコロンまたは改行としては機能しません。

0
Amit Ganvir