You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a cheat sheet for how to perform various actions to ZSH, which can be tricky to find on the web as the syntax is not intuitive and it is generally not very well-documented.
Strings
Description
Syntax
Get a single character
${VARNAME[index]}
Get the string from a specific index
${VARNAME[index,-1]}
Get a substring
${VARNAME[from,to]}
Replace the first occurrence in a string
${VARNAME/toreplace/replacement}
Replace the last occurrence in a string
${VARNAME//toreplace/replacement}
Cut a string after a model
${VARNAME%%model*}
Check if a string starts by a specific substring
if [[ $VARNAME = "startstr"* ]]
Arrays
Description
Syntax
Create an array
VARNAME=()
Create an array with initial values
VARNAME=(value1 value2 value3)
Push to an array
VARNAME+(value)
Access an array's element
VARNAME[index]
Remove first element from an array (shift)
shift VARNAME
Remove last element from an array (pop)
shift -p VARNAME
Get an array's length
${#VARNAME[@]}
Iterate over an array's values
for value in $VARNAME;
Get index of a value in an array
${VARNAME[(i)value]}
Get an array slice after the specified index
${VARNAME:index}
Get an array slice after the specified index
${VARNAME:index:length}
Check if a value is contained in an array
if (( ${VARNAME[(i)value]} <= ${#VARNAME[@]} ));
Check if an array is empty
if [[ -z $VARNAME ]]
Check if an array is not empty
if [[ ! -z $VARNAME ]]
Associative arrays (= maps / dictionaries)
Associate arrays are the equivalent of hash maps or dictionaries in many other programming languages: unlike arrays, they can use string keys, and these don't necessary have an order.
Description
Syntax
Create an associative array
declare -A VARNAME=()
Create an associative array with initial values
declare -A VARNAME=( [key1]=value1 [key2]=value2 )
Add a new key to the array
VARNAME[key]=value
Remove a key from the array
unset 'VARNAME[key]
Access the array's elements
$VARNAME[key]
Iterate over the array's values
for value in $VARNAME;
Iterate over the array's keys
for key in ${(@k)VARNAME};
Iterate over the array's key-value pairs
for key value in ${(@kv)VARNAME};
Arithmetics
Description
Syntax
Compute a mathematical expression (variables don't need to be prefixed with $ in it)
$((expression))
Variables
Description
Syntax
Get the value of a variable whose name is in another variable
${(P)NAMEVAR}
Get the list of all defined variables, as an array
${(k)parameters}
Delete a variable
unset VARNAME
Functions
Description
Syntax
Declare a local variable (not accessible outside the function)
local varname=...
Get the original executable name
$0
Get a parameter
$1 (second is $2, etc.)
Expand all parameters
$*
Expand all parameters but keep them quoted if needed
$@ (tip: it's an array!)
Remove the first parameter from $@
shift
Remove the last parameter from $@
shift -p
Exit the function with a status code (behaves like for a command)
Iterate over a list of filesystem items, fail silently if no match found
for i in globpattern(N);
Examples cheat sheet
Return a value from within a function:
functionadd() {
local sum=$(($1+$2))echo$sum
}
functionadd_twice() {
local sum=$(add $1$2)# get the callee's STDOUTlocal sum_twice=$(add $sum$sum)echo$sum_twice
}
echo$(add 2 3)# 5echo$(add_twice 2 3)# 10
A word on conditionals
Conditionals use expressions, such as in if [[ -z $VARNAME ]]; the expression is [[ -z $VARNAME ]]. These can also be used in while loops, as well as be used outside of blocks:
This works because conditional expressions ([[ ... ]] and (( ... ))) don't actually return a value; they behave like commands and as such set the status code to 0 if the condition is true, or 1 else.
If we want to display the message only if the condition is falsey: