Добавить новый элемент в массив без указания индекса в Bash

Есть ли способ сделать что-то вроде PHPs $array[] = 'foo'; в bash vs делает:

 array[0] = 'foo' array[1] = 'bar' 

Да, есть:

 ARRAY=() ARRAY+=('foo') ARRAY+=('bar') 

Справочное руководство Bash :

В контексте, когда оператор присваивания присваивает значение переменной оболочки или индексу массива (см. Раздел «Массивы»), оператор «+ =» может использоваться для добавления или добавления к предыдущему значению переменной.

Как указывает Dumb Guy , важно отметить, начинается ли массив с нуля и является последовательным. Поскольку вы можете назначать и удалять несмежные индексы ${#array[@]} , не всегда является следующим элементом в конце массива.

 $ array=(abcdefgh) $ array[42]="i" $ unset array[2] $ unset array[3] $ declare -p array # dump the array so we can see what it contains declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")' $ echo ${#array[@]} 7 $ echo ${array[${#array[@]}]} h 

Вот как получить последний индекс:

 $ end=(${!array[@]}) # put all the indices in an array $ end=${end[@]: -1} # get the last one $ echo $end 42 

Это иллюстрирует, как получить последний элемент массива. Вы часто увидите это:

 $ echo ${array[${#array[@]} - 1]} g 

Как вы можете видеть, поскольку мы имеем дело с разреженным массивом, это не последний элемент. Это работает как на разреженных, так и на смежных массивах:

 $ echo ${array[@]: -1} i 
 $ declare -a arr $ arr=("a") $ arr=("${arr[@]}" "new") $ echo ${arr[@]} a new $ arr=("${arr[@]}" "newest") $ echo ${arr[@]} a new newest 

Если ваш массив всегда последователен и начинается с 0, вы можете сделать это:

array[${#array[@]}] = 'foo'

${#array_name[@]} получает длину массива

С индексированным массивом вы можете сделать что-то вроде этого:

 declare -aa=() a+=('foo' 'bar') 
  • Разница между массивом int и массивом int
  • Чтение строк из файла в массив Bash
  • Почему я не могу обработать массив как указатель в C?
  • Есть ли максимальный предел длины массива в C ++?
  • Инициализация массива использует переменную const в C ++
  • Байт-массив для преобразования изображений
  • java: понимание метода Arrays.asList (T ... array) для примитивных типов
  • Можно ли использовать новое место для массивов в переносном режиме?
  • Сопоставьте 2D-массив с массивом 1D
  • Генерики, массивы и ClassCastException
  • Как изменить массив int в Java?
  • Давайте будем гением компьютера.