Skip to content

Instantly share code, notes, and snippets.

@TobberH
Forked from ClementNerma/zsh-cheatsheet.md
Created February 17, 2021 21:48
Show Gist options
  • Save TobberH/235cf3c9d8a1213a1ae3ac006522c47e to your computer and use it in GitHub Desktop.
Save TobberH/235cf3c9d8a1213a1ae3ac006522c47e to your computer and use it in GitHub Desktop.

ZSH CheatSheet

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=()
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 ]]

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) return 1 (or any other code)
Get the list of all functions, as an array ${(k()functions}
Delete a function unset -f func_name

Aliases

Description Syntax
Display the list of all defined aliases alias
Get the list of all defined aliases, as an array ${(k)aliases}
Define an alias alias name="command arg1 arg2 arg3 ..."
Remove an alias unalias name
Get the arguments, with escaped spaces ${@:q}

Conditionals

A word on conditionals

Syntaxes:

# 1)
if expression
then
    # instructions
fi

# 2)
if expression; then
    # instructions
fi

# 3)
if expression; then ...; fi

# 4)
if expression; then
    # instructions
else
    # instructions
fi

# 5)
if expression; then
    # instructions
elif expression
    # instructions
else
    # instructions
fi
Description Syntax
Check if a string is empty or not defined if [[ -z $VARNAME ]];
Check if a string is defined and not empty if [[ ! -z $VARNAME ]];
Check if a file exists if [[ -f "filepath" ]];
Check if a directory exists if [[ -d "dirpath" ]];
Check if a symbolic link exists if [[ -L "symlinkpath" ]];
Check if a shell option is set if [[ -o OPTION_NAME ]];
Check if two values are equal if [[ $VAR1 = $VAR2 ]];
Check if two values are different if [[ $VAR1 != $VAR2 ]];
Check if a number is greater than another if (( $VAR1 > $VAR2 ));
Check if a number is smaller than another if (( $VAR1 < $VAR2 ));
Check if a command exits successfully (exit code 0) if command arg1 arg2 ...
Check if a command doesn't exit successfully (exit code != 0) if ! command arg1 arg2 ...

Loops

Syntaxes:

# 1)
for itervarname in iterable
do
    # instructions
done

# 2)
for itervarname in iterable; do
    # instructions
done

# 3)
for itervaname in iterable; do ...; done
Description Syntax
Iterate over a range (inclusive) for i in {from..to};
Iterate over a list of filesystem items for i in globpattern;
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:

function add() {
    local sum=$(($1 + $2))
    echo $sum
}

function add_twice() {
    local sum=$(add $1 $2) # get the callee's STDOUT
    local sum_twice=$(add $sum $sum)
    echo $sum_twice
}

echo $(add 2 3) # 5
echo $(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:

[[ -z $VARNAME ]] && echo "VARNAME is defined!"
[[ -f $FILEPATH ]] && echo "File exists!"

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:

[[ -z $VARNAME ]] || echo "VARNAME is defined!"
[[ -f $FILEPATH ]] || echo "File exists!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment