Last active
October 28, 2018 21:46
-
-
Save ejmg/82e0fd64c23ab092687c15209d7ed77f to your computer and use it in GitHub Desktop.
don't ask
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<letter> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z| | |
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z | |
<digit> ::= 0|1|2|3|4|5|6|7|8|9 | |
<number> ::= <digit> | |
| <number> <digit> | |
<word> ::= <letter> | |
| <word> <letter> | |
| <word> '_' | |
<word_list> ::= <word> | |
| <word_list> <word> | |
<assignment_word> ::= <word> '=' <word> | |
<redirection> ::= '>' <word> | |
| '<' <word> | |
| <number> '>' <word> | |
| <number> '<' <word> | |
| '>>' <word> | |
| <number> '>>' <word> | |
| '<<' <word> | |
| <number> '<<' <word> | |
| '<&' <number> | |
| <number> '<&' <number> | |
| '>&' <number> | |
| <number> '>&' <number> | |
| '<&' <word> | |
| <number> '<&' <word> | |
| '>&' <word> | |
| <number> '>&' <word> | |
| '<<-' <word> | |
| <number> '<<-' <word> | |
| '>&' '-' | |
| <number> '>&' '-' | |
| '<&' '-' | |
| <number> '<&' '-' | |
| '&>' <word> | |
| <number> '<>' <word> | |
| '<>' <word> | |
| '>|' <word> | |
| <number> '>|' <word> | |
<simple_command_element> ::= <word> | |
| <assignment_word> | |
| <redirection> | |
<redirection_list> ::= <redirection> | |
| <redirection_list> <redirection> | |
<simple_command> ::= <simple_command_element> | |
| <simple_command> <simple_command_element> | |
<command> ::= <simple_command> | |
| <shell_command> | |
| <shell_command> <redirection_list> | |
<shell_command> ::= <for_command> | |
| <case_command> | |
| while <compound_list> do <compound_list> done | |
| until <compound_list> do <compound_list> done | |
| <select_command> | |
| <if_command> | |
| <subshell> | |
| <group_command> | |
| <function_def> | |
<for_command> ::= for <word> <newline_list> do <compound_list> done | |
| for <word> <newline_list> '{' <compound_list> '}' | |
| for <word> ';' <newline_list> do <compound_list> done | |
| for <word> ';' <newline_list> '{' <compound_list> '}' | |
| for <word> <newline_list> in <word_list> <list_terminator> | |
<newline_list> do <compound_list> done | |
| for <word> <newline_list> in <word_list> <list_terminator> | |
<newline_list> '{' <compound_list> '}' | |
<select_command> ::= select <word> <newline_list> do <list> done | |
| select <word> <newline_list> '{' <list> '}' | |
| select <word> ';' <newline_list> do <list> done | |
| select <word> ';' <newline_list> '{' list '}' | |
| select <word> <newline_list> in <word_list> | |
<list_terminator> <newline_list> do <list> done | |
| select <word> <newline_list> in <word_list> | |
<list_terminator> <newline_list> '{' <list> '}' | |
<case_command> ::= case <word> <newline_list> in <newline_list> esac | |
| case <word> <newline_list> in <case_clause_sequence> | |
<newline_list> esac | |
| case <word> <newline_list> in <case_clause> esac | |
<function_def> ::= <word> '(' ')' <newline_list> <group_command> | |
| function <word> '(' ')' <newline_list> <group_command> | |
| function <word> <newline_list> <group_command> | |
<subshell> ::= '(' <compound_list> ')' | |
<if_command> ::= if <compound_list> then <compound_list> fi | |
| if <compound_list> then <compound_list> else <compound_list> fi | |
| if <compound_list> then <compound_list> <elif_clause> fi | |
<group_command> ::= '{' <list> '}' | |
<elif_clause> ::= elif <compound_list> then <compound_list> | |
| elif <compound_list> then <compound_list> else <compound_list> | |
| elif <compound_list> then <compound_list> <elif_clause> | |
<case_clause> ::= <pattern_list> | |
| <case_clause_sequence> <pattern_list> | |
<pattern_list> ::= <newline_list> <pattern> ')' <compound_list> | |
| <newline_list> <pattern> ')' <newline_list> | |
| <newline_list> '(' <pattern> ')' <compound_list> | |
| <newline_list> '(' <pattern> ')' <newline_list> | |
<case_clause_sequence> ::= <pattern_list> ';;' | |
| <case_clause_sequence> <pattern_list> ';;' | |
<pattern> ::= <word> | |
| <pattern> '|' <word> | |
<list> ::= <newline_list> <list0> | |
<compound_list> ::= <list> | |
| <newline_list> <list1> | |
<list0> ::= <list1> '\n' <newline_list> | |
| <list1> '&' <newline_list> | |
| <list1> ';' <newline_list> | |
<list1> ::= <list1> '&&' <newline_list> <list1> | |
| <list1> '||' <newline_list> <list1> | |
| <list1> '&' <newline_list> <list1> | |
| <list1> ';' <newline_list> <list1> | |
| <list1> '\n' <newline_list> <list1> | |
| <pipeline_command> | |
<list_terminator> ::= '\n' | |
| ';' | |
<newline_list> ::= | |
| <newline_list> '\n' | |
<simple_list> ::= <simple_list1> | |
| <simple_list1> '&' | |
| <simple_list1> ';' | |
<simple_list1> ::= <simple_list1> '&&' <newline_list> <simple_list1> | |
| <simple_list1> '||' <newline_list> <simple_list1> | |
| <simple_list1> '&' <simple_list1> | |
| <simple_list1> ';' <simple_list1> | |
| <pipeline_command> | |
<pipeline_command> ::= <pipeline> | |
| '!' <pipeline> | |
| <timespec> <pipeline> | |
| <timespec> '!' <pipeline> | |
| '!' <timespec> <pipeline> | |
<pipeline> ::= | |
<pipeline> '|' <newline_list> <pipeline> | |
| <command> | |
<time_opt> ::= '-p' | |
<timespec> ::= time | |
| time <time_opt> | |
.XE "BNF (Backus-Naur Form)" | |
.XE "bash" "syntax, BNF form of" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment