Странное поведение неинициализированных массивов и массивов сброса

Некоторые идеи:

  1. Вы могли использовать плагин ping для collectd для контроля времени ping со шлюза человечности на некоторые выбранные узлы Интернета.
  2. Если Ваш маршрутизатор поддерживает SNMP, Вы могли бы использовать mrtg для контроля трафика в интерфейсах маршрутизатора.
  3. Вы могли установить smtpd на своем шлюзе человечности и использовать mrtg для контроля интерфейсов шлюза.
  4. Наконец, что не менее важно, Вы могли использовать snmp collectd плагин для контроля непосредственно времени работы в интерфейсе глобальной сети маршрутизатора (но это требует некоторого основного snmp знания).

7
12.03.2015, 21:36
2 ответа

Вы видите различие с 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 на расширении, как не даст корректный результат во многих случаях.

11
27.01.2020, 20:15
  • 1
    , о котором я не знал declare -p. Спасибо за решение моих сомнений. Единственной вещью, которая не ясна мне, является Ваше последнее предложение. Я всегда использовал ${#array[@]} нотация, почему Вы сказали мне не использовать другой? –  Bakuriu 26.10.2012, 20:37
  • 2
    @Bakuriu я просто пытался сказать, что, чтобы протестировать, если массив пуст, легче протестировать если количество, обеспеченное ${#array[@]} 0, чем попытка развернуть содержание массива и тестирование, если получившая строка пуста. –  jw013 26.10.2012, 20:47

Для инициализации пустого массива использовать

array=()

Для добавления значения к массиву использовать

array+=(value)
8
27.01.2020, 20:15
  • 1
    Большой, я не знал об этом синтаксисе. Единственная вещь состоит в том, что это требует для использования declare -a var постараться не иметь пустой указатель вначале. –  Bakuriu 26.10.2012, 20:38
  • 2
    @Bakuriu: Инициализируйте его как array=(). –  choroba 26.10.2012, 20:45

Теги

Похожие вопросы