Answers:
由于我遇到的情况arr2
可能是空的,但是已经设置好了,所以找不到简单的解决方案。因此,我必须使用一个函数和全局temp变量。但是它在每种情况下以及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中找出间接数组分配,因此这两行和temp变量
为你的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[@]}"})