cat -v /proc/$$/environ List env vars of current shell ($$ is for pid). -v - is for displaying zero-chars. set -A arr one two three arr=( one two three ) Set an arr array-variable. src_files=( **/*.[ch] ) You can yse any form of subsitution for array also Note: for bash - use src_files=( $(find . -name '*.[ch]' -print) ). declare (typeset is also possible instead of declare) - Assign attributes to vars. -a - arrray. -A - associated array (hash). declare -A people = (name1 val1 name2 val2 name3 val3) -p - print... -U - make unique (path/PATH - path is a companion array). -T LD_LIBRARY_PATH ld_library_path Tie -//- in the same way (tied arrays). -u - uppercase. -l - lowercase. -R - right justification. -L - left justification. -x - the same as "export" command. -r - readonly. -i - integer variable (integer can also be used). -i optional_base - -//- for specifying base. -F - floating variable (float can also be used). -E - -//- scientific. Note: f='1.0/3' - specify how many significant digit is needed (3). echo ${#arr} 3 Get the number of elements in the array. echo ${arr[3]} echo $arr[1] Array element access (index is 1-based in zsh, but 0-based in bash). echo $arr Echo just the first element of arr in case of ksh and ALL the elements for zsh. arr[2,3] = ( zwei drei ) Replace a range of elements. arr[2] = () Delete the second element. echo $arr[2,-1] Here -1 indicates the last element. !!! Word-splitting is disabled in zsh by default !!! var='one two' showargs $=var >>one<< >>two<< Directly specify splitting a variable. ${arr[@]} Expand array elements. Each one is a separate word. ${arr[*]} Join all the elements to the string, separated by space. Numbers: echo $(( 3*4 )) Integer expression calculation. echo $(( 0xff )) echo $(( [#16] 255 )) For hexadecimal numbers. echo $(( 12#193 )) For arbitrary base. echo $(( 1. / 3 )) For floating-point output (0.3333333). Alternative and default values: echo ${var:-default} Specify default value in case if the variable is unset. echo ${var:+alternative} Do the opposite (... if variable is set). Variable patterns: ${var#pattern}, ${var##pattern} Expand var removing text that matches pattern (the least/most possible text) from the left. ${var%pattern}, ${var%%pattern} from the right. ${var//pattern/string} This does not enable greedy patterns. Note: to disable greedy pattern matching which is on by default, use (S) var-expansion flag. $a[3,5] Extract substring from 3 to 5 symbol. Indices can be math-expressions. Nested Expansion: ${${file##*/}%.$} Accept a file name and remove an initial path and file extension. Variable expansion flags: ${(var}, where is one of the following: L, U, C - Lower/Upper/Capitalize-First-Letter case. a, i - Array-Index/Case-Independent order. o, O - Ascending/Descending order. f, s, z - Split at Lines/Specified-Char/Into-Words-Taking-Shell-Quoting-Into-Account. F, j - Join words using Newlines/Specified-Character. c, w, W - Count Characters/Words/Words-Including-Empty-Ones. Q - Remove one level of quoting. q - Quote the resulting words. V - Make special characters visible. l, r - Pad words on the Left/Right. t, k, v - Return the Type/Associative-Array-Keys/Associative-Array-Values of variable. %, e - Perform Prompt/Shell expansion of the value. P - Reinterpret values as a further variable name. Example: echo ${(ops:\n:)"$(cut -d: -f5 /etc/passwd)"} echo ${(of)"$(cut -d: -f5 /etc/passwd)"} Here s flag define separator char (\n), Matching patterns against arrays: ${arr:#pattern} Each array element is matched against pattern and those that match are discarded. ${(M}arr:#pattern} Do the opposite - return only those elements that are matched. echo ${(k)assoc_array} extract keys of associated array: echo $assoc_array echo ${(v)assoc_array} extract values of associated array: echo ${(kv)assoc_array} extract keys/values of associated array: assoc_array+=( key4 val4 ... ) add other key/value pairs. unset 'assoc_array[keyN]' remove a key/value. echo ${(k)assoc_array[(r)val]} reverse lookup a single match. echo ${(k)assoc_array[(R)val]} to reverse lookup all matches. echo ${(v)assoc_array[(i)pattern} (i) allows us to use a pattern-match. Loading files to vars: input="$(cat config.ini)" input="$(