Как инициировать элемент массива в 0 в bash?
declare -a MY_ARRAY=()
Будет ли объявление массива таким способом в bash инициировать все элементы массива в 0?
Если нет, как инициировать элемент массива в 0?
3 ответа
Ваш пример объявит / инициализирует пустой массив.
Если вы хотите инициализировать элементы массива, вы делаете что-то вроде этого:
declare -a MY_ARRAY=(0 0 0 0) # this initializes an array with four members
Если вы хотите инициализировать массив из 100 членов, вы можете сделать это:
declare -a MY_ARRAY=( $(for i in {1..100}; do echo 0; done) )
Имейте в виду, что массивы в bash не имеют фиксированной длины (и индексы не должны быть последовательными). Поэтому вы не можете инициализировать все члены массива, если не знаете, каким должно быть число.
Значения по умолчанию с ассоциативными массивами
Массивы Bash не являются массивами фиксированной длины, поэтому вы не можете предварительно инициализировать все элементы. Индексированные массивы также не редки, поэтому вы не можете использовать значения по умолчанию так, как вы думаете.
Однако вы можете использовать ассоциативные массивы с расширением для пропущенных значений. Например:
declare -A foo
echo "${foo[bar]:-baz}"
Это вернет "baz" для любого отсутствующего ключа. В качестве альтернативы, вместо того, чтобы просто возвращать значение по умолчанию, вы можете установить его для отсутствующих ключей. Например:
echo "${foo[bar]:=baz}"
Этот альтернативный вызов не только вернет "baz", но также сохранит значение в массиве для последующего использования. В зависимости от ваших потребностей, любой метод должен работать для определенного вами варианта использования.
Да, он инициирует пустой массив и назначает его MY_ARRAY
, Вы можете проверить что-то вроде этого:
#!/bin/bash
declare -a MY_ARRAY=()
echo ${#MY_ARRAY} # this prints out the length of the array