Копирование массива с использованием динамических переменных

Копирование массива с использованием динамических переменных

У меня есть массив из 24 элементов, хранящийся в массивеmba_ext.

echo ${mba_ext[13]} gives me expected results.

Теперь я создал переменнуюtemp="mba_ext"

Теперь я пытаюсь скопировать содержимое массива в другой массив, используя переменную temp. Я написал код, как показано ниже:

new_array=$(eval echo '$'{${temp}[@]})

Когда я даю, echo$new_arrayя получаю все содержимое массива, печатаемое без какого-либо индекса.

Когда я даю, echo ${new_array[4]}я не получаю никаких результатов. В идеале эта команда должна выводить содержимое в индексном месте 4.

Может кто-нибудь помочь?

решение1

На основеэтот ответ на Super User.

Вы можете использовать косвенную адресацию переменной с соответствующим массивом […]. Сложность в том, что вам нужно включить элемент массива (или [@]все элементы) в переменную, через которую вы осуществляете косвенную адресацию.

Пример кода с использованными вами именами:

mba_ext=('normal' 'with space' 'double"quote' "single'quote" $'new-\n-line' '\backslash')
temp="mba_ext"
temparray="${temp}[@]"   # This includes the array name AND "[@]"
new_array=("${!temparray}")
printf '<%s>\n' "${new_array[@]}"

Связанный контент