зеркало из
https://github.com/iharh/notes.git
synced 2025-10-30 13:16:07 +02:00
186 строки
4.9 KiB
Plaintext
186 строки
4.9 KiB
Plaintext
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 <num> - right justification.
|
|
-L <num> - left justification.
|
|
-x - the same as "export" command.
|
|
-r - readonly.
|
|
-i - integer variable (integer <var> can also be used).
|
|
-i optional_base - -//- for specifying base.
|
|
-F - floating variable (float <var> 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:
|
|
${(<flag>var}, where <flag> 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="$(<config.ini)"
|
|
The equiv forms.
|
|
|
|
while read; do
|
|
echo $REPLY
|
|
done < config.ini
|
|
Read one line at a time.
|
|
|
|
ps | while read; do
|
|
echo $REPLY
|
|
done
|
|
|
|
ps | while read pid tty time cmd; do
|
|
echo $cmd $pid
|
|
done
|
|
The same, but using word-splitting.
|
|
|
|
while IFS=: read user pw uid gid name home shell; do
|
|
echo $user $name
|
|
done </etc/passwd
|
|
... Using internal field separator (IFS) var, changed locally.
|
|
|
|
|
|
|
|
|
|
|
|
zsh options
|
|
|
|
ksh_arrays
|
|
To make 0-based array element index access.
|
|
octal_zeroes
|
|
Enable octal zeroes.
|
|
c_bases
|
|
Output standard c-convension bases.
|
|
|
|
|
|
zsh modules
|
|
|
|
zmodload zsh/mathfunc
|
|
Load math functions (pi, atan, ...).
|