Vì tôi gặp trường hợp arr2
có thể trống, nhưng được đặt, tôi không thể tìm ra giải pháp đơn giản. Vì vậy, tôi đã phải đi với một chức năng và biến temp toàn cầu. Nhưng nó hoạt động trong mọi trường hợp và trong bash 3.2 và 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[@]}"
Tôi sử dụng tham chiếu mảng gián tiếp để sao chép các giá trị vào TEMP_VAR
, nhưng tôi không thể tìm ra một phép gán mảng gián tiếp trong bash, do đó hai dòng và biến temp
Dành cho các bạn set -eu
hâm mộ ngoài kia
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[@]}"})