Como tenía casos en los que mi arr2
vacío podría estar vacío, pero configurado, no pude encontrar una solución simple. Así que tuve que ir con una función y una variable temporal global. Pero funciona en todos los casos y en bash 3.2 y 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[@]}"
Utilizo una referencia de matriz indirecta para copiar los valores TEMP_VAR
, pero no pude entender una asignación de matriz indirecta en bash, por lo tanto, las dos líneas y la variable temporal
Para ustedes set -eu
fanáticos por ahí
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[@]}"})