Bash
· 4 min read
Handling unset or empty variables
Syntax
+
-- if the variable is set, use the substitution-
-- if the variable is not set, use the substitution:
-- handle empty string as though it were unset
Table
unset VAR | export VAR='' | export VAR='x' | |
---|---|---|---|
echo ">${VAR+y}<" | >< | >y< | >y< |
echo ">${VAR:+y}<" | >< | >< | >y< |
echo ">${VAR-y}<" | >y< | >< | >x< |
echo ">${VAR:-y}<" | >y< | >y< | >x< |
When the variable is not set
$ unset VAR
$ echo ">${VAR+y}<"
><
$ echo ">${VAR:+y}<"
><
$ echo ">${VAR-y}<"
>y<
$ echo ">${VAR:-y}<"
>y<
When the variable is set to empty string
$ export VAR=''
$ echo ">${VAR+y}<"
>y<
$ echo ">${VAR:+y}<"
><
$ echo ">${VAR-y}<"
><
$ echo ">${VAR:-y}<"
>y<
When the variable is set to a non-empty string
$ export VAR='x'
$ echo ">${VAR+y}<"
>y<
$ echo ">${VAR:+y}<"
>y<
$ echo ">${VAR-y}<"
>x<
$ echo ">${VAR:-y}<"
>x<
(bash:unofficial-strict-mode)=
Unofficial "Strict Mode"
TL;DR
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
Explanation
set -e
option - cease execution on first errorset -u
option - treat undefined variables as an errorset -o pipefail
option - treat an error in any sub-command within a pipeline as a failure of the whole pipeline
Colors Cheat Sheet
Regular Colors
Value | Color |
---|---|
\e[0;30m | Black |
\e[0;31m | Red |
\e[0;32m | Green |
\e[0;33m | Yellow |
\e[0;34m | Blue |
\e[0;35m | Purple |
\e[0;36m | Cyan |
\e[0;37m | White |
Bold
Value | Color |
---|---|
\e[1;30m | Black |
\e[1;31m | Red |
\e[1;32m | Green |
\e[1;33m | Yellow |
\e[1;34m | Blue |
\e[1;35m | Purple |
\e[1;36m | Cyan |
\e[1;37m | White |
Underline
Value | Color |
---|---|
\e[4;30m | Black |
\e[4;31m | Red |
\e[4;32m | Green |
\e[4;33m | Yellow |
\e[4;34m | Blue |
\e[4;35m | Purple |
\e[4;36m | Cyan |
\e[4;37m | White |
Background
Value | Color |
---|---|
\e[40m | Black |
\e[41m | Red |
\e[42m | Green |
\e[43m | Yellow |
\e[44m | Blue |
\e[45m | Purple |
\e[46m | Cyan |
\e[47m | White |
High Intensity
Value | Color |
---|---|
\e[0;90m | Black |
\e[0;91m | Red |
\e[0;92m | Green |
\e[0;93m | Yellow |
\e[0;94m | Blue |
\e[0;95m | Purple |
\e[0;96m | Cyan |
\e[0;97m | White |
Bold High Intensity
Value | Color |
---|---|
\e[1;90m | Black |
\e[1;91m | Red |
\e[1;92m | Green |
\e[1;93m | Yellow |
\e[1;94m | Blue |
\e[1;95m | Purple |
\e[1;96m | Cyan |
\e[1;97m | White |
=== |
High Intensity backgrounds
Value | Color |
---|---|
\e[0;100m | Black |
\e[0;101m | Red |
\e[0;102m | Green |
\e[0;103m | Yellow |
\e[0;104m | Blue |
\e[0;105m | Purple |
\e[0;106m | Cyan |
\e[0;107m | White |
Reset
Value | Color |
---|---|
\e[0m | Reset |