Bash: Error `Unbound variable' when appending to empty array
From FVue
Contents
Problem
I have defined strict bash settings:
set -e # Exit on error set -u # Trigger error when expanding unset variables
But now I get the error bash: varname[@]: Unbound variable when I execute the code below:
$ set -u $ t=( "${t[@]}" foo ) bash: t: unbound variable
Declaring the array in advance with (declare -a varname
) doesn't help:
$ set -u $ declare -a t $ t=( "${t[@]}" foo ) -bash: t[@]: unbound variable
Setting the variable to an empty array (t=( )
) doesn't help either:
$ set -u $ t=( ) $ t=( "${t[@]}" foo ) -bash: t[@]: unbound variable
Solution 1: Dash (-) parameter expansion
Bash offers parameter expansion for unset variables, e.g.: ${varname-}
. The bash manual - search for "Parameter expansion" - says the dash (-) has the following effect:
- "If parameter is unset, substitute with empty value."
Using the dash (-) in ${t[@]-}
prevents the "unbound variable" error:
$ set -u $ t=( "${t[@]-}" foo ) $
Solution 2: Set last item specifically
Instead of appending one element, set the last item specifically, without any "unbound variable" error:
$ set -u $ t[${#t[*]}]=foo $
See also
- Bash: Append to array using while-loop
- Best practice for appending multiple values to an existing array
- Advanced Bash-Scripting Guide: Arrays
- Many useful examples concerning arrays in bash
Advertisement