============================= Literal words ============================= echo a echo a b --- (program (command (command_name (word)) (word)) (command (command_name (word)) (word) (word))) ============================= Words with special characters ============================= echo {o[k]} echo }}} echo ]]] === --- (program (command (command_name (word)) (concatenation (word) (word))) (command (command_name (word)) (concatenation)) (command (command_name (word)) (concatenation) (word))) ============================= Simple variable expansions ============================= echo $abc --- (program (command (command_name (word)) (simple_expansion (variable_name)))) ============================= Special variable expansions ============================= echo $# $* $@ $! --- (program (command (command_name (word)) (simple_expansion (special_variable_name)) (simple_expansion (special_variable_name)) (simple_expansion (special_variable_name)) (simple_expansion (special_variable_name)))) ============================= Variable expansions ============================= echo ${} echo ${#} echo ${var1#*#} echo ${!abc} echo ${abc} echo ${abc:-def} echo ${abc:- } echo ${abc: } --- (program (command (command_name (word)) (expansion)) (command (command_name (word)) (expansion)) (command (command_name (word)) (expansion (variable_name) (word))) (command (command_name (word)) (expansion (variable_name))) (command (command_name (word)) (expansion (variable_name))) (command (command_name (word)) (expansion (variable_name) (word))) (command (command_name (word)) (expansion (variable_name))) (command (command_name (word)) (expansion (variable_name)))) =================================== Variable expansions with operators =================================== A="${B[0]# }" C="${D/#* -E /}" F="${G%% *}" --- (program (variable_assignment (variable_name) (string (expansion (subscript (variable_name) (word))))) (variable_assignment (variable_name) (string (expansion (variable_name) (regex)))) (variable_assignment (variable_name) (string (expansion (variable_name) (word) (word))))) =================================== Variable expansions in strings =================================== A="${A:-$B/c}" A="${b=$c/$d}" --- (program (variable_assignment (variable_name) (string (expansion (variable_name) (concatenation (simple_expansion (variable_name)) (word))))) (variable_assignment (variable_name) (string (expansion (variable_name) (concatenation (simple_expansion (variable_name)) (word) (simple_expansion (variable_name))))))) =================================== Variable expansions with regexes =================================== A=${B//:;;/$'\n'} # escaped space C=${D/;\ *;|} --- (program (variable_assignment (variable_name) (expansion (variable_name) (regex))) (comment) (variable_assignment (variable_name) (expansion (variable_name) (regex)))) =================================== Other variable expansion operators =================================== cat ${BAR} ${ABC=def} ${GHI:?jkl} [ "$a" != "${a#[Bc]}" ] --- (program (command (command_name (word)) (expansion (variable_name)) (expansion (variable_name) (word)) (expansion (variable_name) (word))) (test_command (binary_expression (string (simple_expansion (variable_name))) (string (expansion (variable_name) (concatenation (word))))))) ============================= Words ending with '$' ============================= grep ^${var}$ --- (program (command (command_name (word)) (concatenation (word) (expansion (variable_name))))) ============================= Command substitutions ============================= echo `echo hi` echo `echo hi; echo there` echo $(echo $(echo hi)) echo $(< some-file) --- (program (command (command_name (word)) (command_substitution (command (command_name (word)) (word)))) (command (command_name (word)) (command_substitution (command (command_name (word)) (word)) (command (command_name (word)) (word)))) (command (command_name (word)) (command_substitution (command (command_name (word)) (command_substitution (command (command_name (word)) (word)))))) (command (command_name (word)) (command_substitution (file_redirect (word))))) ============================= Process substitutions ============================= wc -c <(echo abc && echo def) wc -c <(echo abc; echo def) echo abc > >(wc -c) --- (program (command (command_name (word)) (word) (process_substitution (list (command (command_name (word)) (word)) (command (command_name (word)) (word))))) (command (command_name (word)) (word) (process_substitution (command (command_name (word)) (word)) (command (command_name (word)) (word)))) (redirected_statement (command (command_name (word)) (word)) (file_redirect (process_substitution (command (command_name (word)) (word)))))) ============================= Single quoted strings ============================= echo 'a b' 'c d' --- (program (command (command_name (word)) (raw_string) (raw_string))) ============================= Double quoted strings ============================= echo "a" "b" echo "a ${b} c" "d $e" --- (program (command (command_name (word)) (string) (string)) (command (command_name (word)) (string (expansion (variable_name))) (string (simple_expansion (variable_name))))) ========================================= Strings containing command substitutions ========================================= find "`dirname $file`" -name "$base"'*' --- (program (command (command_name (word)) (string (command_substitution (command (command_name (word)) (simple_expansion (variable_name))))) (word) (concatenation (string (simple_expansion (variable_name))) (raw_string)))) ========================================= Strings containing escape sequence ========================================= echo "\"The great escape\`\${var}" --- (program (command (command_name (word)) (string))) ====================================== Strings containing special characters ====================================== echo "s/$/'/" echo "#" echo "s$" --- (program (command (command_name (word)) (string)) (command (command_name (word)) (string)) (command (command_name (word)) (string))) ======================================== Strings with ANSI-C quoting ======================================== echo $'Here\'s johnny!\r\n' --- (program (command (command_name (word)) (ansii_c_string))) ========================================= Arrays and array expansions ========================================= a=() b=(1 2 3) echo ${a[@]} echo ${#b[@]} a[$i]=50 a+=(foo "bar" $(baz)) --- (program (variable_assignment (variable_name) (array)) (variable_assignment (variable_name) (array (word) (word) (word))) (command (command_name (word)) (expansion (subscript (variable_name) (word)))) (command (command_name (word)) (expansion (subscript (variable_name) (word)))) (variable_assignment (subscript (variable_name) (simple_expansion (variable_name))) (word)) (variable_assignment (variable_name) (array (word) (string) (command_substitution (command (command_name (word))))))) ============================== Escaped characters in strings ============================== echo -ne "\033k$1\033\\" > /dev/stderr --- (program (redirected_statement (command (command_name (word)) (word) (string (simple_expansion (variable_name)))) (file_redirect (word)))) ================================================================================ Words containing bare '#' ================================================================================ curl -# localhost #comment without space nix build nixpkgs#hello -v # comment with space -------------------------------------------------------------------------------- (program (command (command_name (word)) (word) (word)) (comment) (command (command_name (word)) (word) (word) (word)) (comment))