Копирование массива Bash с пустыми элементами
у меня проблемы в bash (ver 4.2.25) копирование массивов с пустыми элементами. Когда я делаю копию массива в другую переменную, он не копирует вместе с ней пустые элементы.
#!/bin/bash
array=( 'one' '' 'three' )
copy=( ${array[*]} )
IFS=$'n'
echo "--- array (${#array[*]}) ---"
echo "${array[*]}"
echo
echo "--- copy (${#copy[*]}) ---"
echo "${copy[*]}"
когда я это делаю, вот результат:
--- array (3) ---
one
three
--- copy (2) ---
one
three
исходный массив имеет все три элемента, включая пустой элемент, а копия-нет. Что я здесь делаю не так?
2 ответов
у вас есть проблема с цитированием, и вы должны использовать @
, а не *
. Использовать:
copy=( "${array[@]}" )
любой элемент массива можно ссылаться с помощью
${name[subscript]}
. Фигурные скобки необходимы, чтобы избежать конфликтов с расширением путь. Еслиsubscript
is@
или*
, слово распространяется на всех членовname
. Эти индексы различаются только тогда, когда слово появляется в двойных кавычках. Если это слово цитируется дважды,${name[*]}
расширяется до одного слова с помощью значение каждого члена массива, разделенного первым символомIFS
специальная переменная, и${name[@]}
расширяет каждый элементname
к отдельному слову.
пример вывода после изменения:
--- array (3) ---
one
three
--- copy (3) ---
one
three
начиная с Баш 4.3, вы можете сделать это
$ alpha=(bravo charlie 'delta 3' '' foxtrot)
$ declare -n golf=alpha
$ echo "${golf[2]}"
delta 3