回答:
改行はコマンドの区切り文字でもあるため、行の終わりにある単一のセミコロンは不要です。case
具体的には、各パターンブロックの最後のコマンドの最後にセミコロンが2つ必要です。詳細help case
については、を参照してください。
によると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>
したがって、は;
メタキャラクタまたは制御演算子にすることができますが、;;
は常に制御演算子です(コマンドの場合)。
特定のコードで;
は、行末のすべては必要ありません。;;
しかし、必要とされています。
;
と;;
、その後は、?BASHが「メタ文字」と呼ぶものと「制御演算子」と呼ぶものとの実際的な違いを知るには、BASH構文解析に慣れていません。
findの特殊なケースでは、;
-execによって呼び出されたコマンドを終了するために使用されます。この質問に対する @kenorbの回答を参照してください。
@ Opensourcebook-Amit
;
端末またはシェルスクリプトの単一のセミコロンに相当する改行 。
以下の例を参照してください。
端末上:
[root@server test]# ls;pwd;
シェルスクリプト:
[root@server test]# cat test4.sh
echo "Current UserName:"
whoami
echo -e "\nCurrent Date:";date;
[root@server test]#
しかし&
、改行または単一のセミコロンに相当するコメントには同意しません
&
バックグラウンドでコマンドを実行することもできますが、コマンドセパレータはセミコロンや改行としては機能しません。
@Ignacio Vazquez-Abrams
実際、これは完全に正確ではありません。行の終わりにある単一のセミコロンは余分ではなく、新しい行とはまったく同じものではありません。
「;」で区切られたコマンド 順次実行されます。シェルは、各コマンドが順番に終了するのを待ちます。戻りステータスは、最後に実行されたコマンドの終了ステータスです。
「改行」で区切られたコマンド かもしれないコマンドは、セミコロンで区切られたときに並列に実行されているが、常に順番に実行します
A sequence of one or more newlines may appear in a list to delimit commands, equivalent to a semicolon.
が表示されます。セミコロンについて引用した内容は、改行にも同様に適用されます。
&
ないことがわかります\n
。コメントには、セミコロンをスキップできると記載されています。これは、明らかに、およびと&
同様にコマンドの区切り文字でもあるためです。;
\n