Como tive casos em que meu arr2
pode estar vazio, mas definido, não consegui encontrar uma solução simples. Então eu tive que ir com uma função e uma variável global de temperatura. Mas funciona em todos os casos e no bash 3.2 e no 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[@]}"
Eu uso a referência indireta da matriz para copiar os valores TEMP_VAR
, mas não consegui descobrir uma atribuição indireta da matriz no bash, portanto, as duas linhas e a variável temp
Para vocês set -eu
fãs por aí
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[@]}"})