The syntax of the for command is:for name [ [in [words ...] ] ; ] do commands; doneThe syntax of the case command is:case word in [ [(] pattern [| pattern]...) command-list ;;]... esacThe select construct is Bash's extension to POSIX. It allows the easy generation of menus. It has almost the same syntax as the for command:select name [in words ...]; do commands; doneThe syntax of the {...} command is:{ list; }Questions:why are the clauses in the case command separated by ;; rather than ; which is used in the other commands?In the for and case commands,  when the in part is ignored, why are the following ; and ;; also ignored instead of remaining?By contrast, in the select command, ; isn't ignored when the in part is ignored.Note that in the case command in isn't ignored with the following part, while in the for command it is. Are they arbitrary inconsistent designs of POSIX shells?What kind of tokens are ; and ;; used in compound commands?In a command list (opposed to a compound command), ; is a control operator.In the { list; } compound command, why must there be a ; between list and }? Is } considered a clause, and is { list also a clause? Must clauses in a compound commands be separated by either ; or a newline?Further reading to my previous question and Homer's reply, where I asked Why do we need a semicolon instead of a whitespace for seperating the words?, given that the semicolon and whitespace are both shell metacharacter, Note:I also would like to list the syntax of while, until, and if commands, but I think they behave similarly to the for command, in terms of the usage of ;.
Usage of `;` in compound commands
bash