Bash Note
Bash Note
- Syntax:
- Lexical elements:
- identifier: start with [_a-zA-Z], and makeup with [_a-zA-Z0-9].
- keyword:
- builtin:
., :, [, ], alias, bg, bind, break, builtin, caller, cd, command, compgen, complete, compopt, continue, coproc, decalare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, jobs, kill, let, local, logout, mapfile, popd, printf, pushd, pwd, read, readarray, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, wait.
- shell:
!, [[, ]], {, }, case, do, done, elif, else, esac, fi, for, function, if, in, select, then, time, until, while
- builtin:
- constant: text.
- operator:
```
- escape special or continue line: .
- quote a string: ‘str’, “str”.
- source file: . file.
-
pipe: , & -
lists of command: ;, &, &&, - group command: ( list ), { list; }
- test: [ expr ], [[ expr ]], ((expr)). -(a|b|c|d|e|f|g|h|k|p|r|s|t|u|w|x|G|L|N|O|S) file, file1 -(ef|nt|ot) file2, -o optname -(v|R) var -(z|n) str str1 (==|=|!=|<|>) str2 arg1 -(eq|ne|lt|le|gt|ge) arg2
- assignment: name=value, array=(a b c d).
- data access: $name, ${name}.
- Special parameters: $*, $@, $#, $?, $-, $$, $!, $0, $_, $n.
- Expansions:
- brace: {a,b,c}, {a..b..c}.
- tilde: ~, ~+, ~-, ~N, ~+N, ~-N.
- parameters: ${para:(-|=|?|+)word}, ${para:off:len}, ${!prefix}, ${prefix@}, ${!name[]}, ${!name[@]}, ${#para}, ${para#word}, ${para##word}, ${para%word}, ${para%%word}, ${para/pat/str}, ${para^pat}, ${para^^pat}, ${para,pat}, ${para,,pat}, ${para@(Q|E|P|A|a)}.
- cmd sub: $(cmd),
cmd
. - arithmetic: $((expr))
id++, id–, ++id, –id, -id, +id, !expr, ~, **, *, /, %, +, -, «,
, <=, >=, <, >, ==, !=, &, ^, , &&, , ?:, =, *=, /=, %=, +=, -=, «=, »=, &=, ^=, =, expr1, expr2 - process substitution: <(list), >(list).
-
filename expansion: *, ?, […], (? * + @ !)(pat). - redirection: [N]<word, [N]>|word, [N]»word, &>word, >&word, &»word, [N]«[-]word, [N]«<word, [N]<&word, [N]>&word, [N]<&DIG-, [N]>&DIG-, [N]<>word.
- history: !, !N, !-N, !!, !string, !?string[?], ^str2^str2^, !#, !(str|!|N|-N):(0|N|^|$|%|X-Y||X|X-):(h|t|r|e|p|q|x|s/old/new/G?|&|gs/old/new/|as/old/new/) ```
- delimeter: white space characters, and comment characters, #.
- Syntax elements:
- type:
'string', "string", string (str1 str2 str3 ...)
- expression:
see operator->test or operator->arithmetic.
- statement:
```
-
pipelines: [time [-p]] [ ! ] command [ [ ⎪ &] command2 … ]. -
lists: command1 && command2, command1 command2. - Compound Commands:
- (list), { list; }, ((expression)), [[ expression ]]
- condition:
- if list; then list; [ elif list; then list; ] … [ else list; ] fi
-
case word in [ [(] pattern [ pattern ] … ) list ;; ] … esac - select name [ in word ] ; do list ; done
- loops:
- for name [ [ in [ word … ] ] ; ] do list ; done
- for (( expr1 ; expr2 ; expr3 )) ; do list ; done
- while list-1; do list-2; done
- until list-1; do list-2; done
- Coprocesses: coproc [NAME] command [redirections]
- Shell Function Definitions:
- name () compound-command [redirection]
- function name [()] compound-command [redirection] ```
-
- decalaration:
array=(str1 str2 str3 ...) [function] func[()] { compound-cmd } [ redirections ] decalare -i intger_var decalare -(a|A) array_var decalare -f func_name
- scope:
local: local, normal assignment, function define global: export, decalare -x
- data access:
```
- see parameters expansion: Special parameters, Expansions->parameters.
- normal: $var, ${var}, ${var[n]}.
- function: func_name arg1 arg2 … ```
- type:
- Others:
- preprocess: no, use source to include source files.
- template: no.
- namespace: no.
- Lexical elements:
- Feature:
- Paradigm: dynamic scripting , procedural, text oriented and cmd oriented language.
- (Package|Library) managment: use builtin source cmd to include source file which act as library.
- OOP: no
- FP: no
- GC: no
- VM: no
- Thread: no
- Misc:
- use external cmd to expand the feature.
- use text output more then return value.
- text oriented and cmd oriented language.
- use builtin cmds and execute environment, and predefine variables.
- 0 and ‘‘(empty string) are true, others are false.
- builtin jobs control, cmd completion, pipe, coprocess, alias, history review, powerful expansion.
- Library:
- Standard library: no, but has builtin cmds.
- Third-party library: external cmd as library.