複合コマンドに ";"使用[閉じる]

複合コマンドに

このコマンドの構文は次のforとおりです。

for name [ [in [words ...] ] ; ] do commands; done

このコマンドの構文は次のcaseとおりです。

case word in [ [(] pattern [| pattern]...) command-list ;;]... esac

このselect設定は POSIX の Bash 拡張です。メニューを簡単に作成できます。構文は for コマンドとほぼ同じです。

select name [in words ...]; do commands; done

このコマンドの構文は次の{...}とおりです。

{ list; }

質問:

  1. 他のコマンドで使用された区切り文字の代わりにコマンドの句が区切られcaseたのはなぜですか?;;;

  2. forandコマンドでその部分を無視caseするとin、なぜ次の;合計;;も残らず無視されますか?

    一方、select命令では;その部分が無視されても無視されませんin

    caseinコマンドの次の部分は無視されませんが、コマンドfor内では無視されます。任意に一貫性のないPOSIXシェルデザインですか?

  3. ;複合コマンドにはどのタイプのタグが使用されますか?;;

    コマンドリスト(複合コマンドとは反対)には;制御演算子があります。

  4. 複合コマンド間に1つの理由が必要なのはなぜですか{ list; }?条項とみなされれば条項でもありますか?複合コマンドの句は改行で区切る必要がありますか?追加読書;list}}{ list;私の前の質問とHomerの質問に答えてください。「単語を区別するためにスペースの代わりにセミコロンが必要なのはなぜですか?」と尋ねました。 「セミコロンとスペースは両方ともシェルメタ文字」だからです。

メモ:

while、およびコマンドの構文もリストしたいのですが、until使い方の面ではifコマンドと同様に動作すると思います。for;

ベストアンサー1

;;;inステートメント操作の一部に答えるには、特定のブランチがcase終了した場合、Caseステートメントの単一ブランチで複数のコマンドを実行する単一行コマンドを作成できないことを検討してください。;

複数行コマンドを使用してこれを実行できますが、このようにシェル構文を設計すると、必要複数行、複数行(改行)を回避できないシェル構文の他の場所はありません。;;シェルデザインでケーススイッチを使用すると、コードを書くときに大きな柔軟性が得られます。


casefor、およびと比較して、whileこれらのコマンドはすべて、各ユースケースで特定の予約語に従います。 (、、、、、、、、、)untiliflistthenelifelsefidodone

case一方、次のような「パターン」のリストが表示されます。何もない--必要なパターンは有効なコマンドの名前でもかまいません。

おすすめ記事