Некоторые идеи:
Вы видите различие с declare -p
:
unset foo
declare -a foo
declare -p foo
# prints declare -a foo='()'
foo=
declare -p foo
# prints declare -a foo='([0]="")'
Если Вы хотите инициализировать пустой массив, вывод первого declare -p
хорошая подсказка на лучшем способе объявить это:
declare -a array='()'
( declare -a
часть является, вероятно, дополнительной, простое array=()
должен работать точно также.)
Если Вы хотите протестировать, если массив имеет 0 элементов, используйте числовое сравнение на ${#array[@]}
; не пытайтесь сделать a test -z
на расширении, как не даст корректный результат во многих случаях.
Для инициализации пустого массива использовать
array=()
Для добавления значения к массиву использовать
array+=(value)
declare -a var
постараться не иметь пустой указатель вначале.
– Bakuriu
26.10.2012, 20:38
declare -p
. Спасибо за решение моих сомнений. Единственной вещью, которая не ясна мне, является Ваше последнее предложение. Я всегда использовал${#array[@]}
нотация, почему Вы сказали мне не использовать другой? – Bakuriu 26.10.2012, 20:37${#array[@]}
0, чем попытка развернуть содержание массива и тестирование, если получившая строка пуста. – jw013 26.10.2012, 20:47