Поскольку у меня были случаи, когда мой arr2
мог быть пустым, но установленным, я не мог найти простое решение. Поэтому мне пришлось пойти с функцией и глобальной временной переменной. Но это работает в любом случае и в Bash 3.2 и Bash 4
function set_temp_array()
{ # 1 - source_array_name $2-* default_values
local default="$1"
shift
if declare -p $default >& /dev/null; then
default="${default}[@]"
TEMP_VAR=("${!default}")
else
TEMP_VAR=("${@}")
fi
}
set_temp_array arr1 "${arr2[@]}"
arr1="${TEMP_VAR[@]}"
Я использую косвенную ссылку на массив, чтобы скопировать значения TEMP_VAR
, но я не смог выяснить косвенное присвоение массива в bash, отсюда две строки и временная переменная
Для вас set -eu
фанатов там
function set_temp_array()
{ # 1 - source_array_name $2-* default_values
local default="$1"
shift
if declare -p $default >& /dev/null; then
default="${default}[@]"
TEMP_VAR=(${!default+"${!default}"})
else
TEMP_VAR=(${@+"${@}"})
fi
}
set_temp_array arr1 ${arr2+"${arr2[@]}"}
arr1=(${TEMP_VAR+"${TEMP_VAR[@]}"})