चूँकि मेरे पास ऐसे मामले थे जहाँ मेरा स्थान arr2
खाली हो सकता था, लेकिन सेट किया गया था, मुझे एक सरल समाधान नहीं मिला। इसलिए मुझे एक फ़ंक्शन और वैश्विक अस्थायी चर के साथ जाना पड़ा। लेकिन यह हर मामले में और 3.2 और बाश 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[@]}"})