В любом случае, когда есть сомнения, используйте скобки!
Увидев, что все они делают то же самое, я думаю, что это вопрос личных предпочтений. Я бы выбрал последний.
Но опять же, я не знаком с python.
Да, есть:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
В контексте, когда оператор присваивания присваивает значение переменную оболочки или индекс массива (см. раздел «Массивы»), оператор «+ =» может использоваться для добавления или добавления к предыдущему значению переменной.
Если ваш массив всегда последователен и начинается с 0, вы можете сделать это:
array[${#array[@]}] = 'foo'
${#array_name[@]}
получает длину массива
+=
(см. Ответ @ e-t172) проще (a), и (b) также работает с массивами, которые не являются смежными и / или не начинаются с 0.
– mklement0
21 September 2012 в 04:06
С индексированным массивом вы можете сделать что-то вроде этого:
declare -a a=()
a+=('foo' 'bar')
Как указывает Dumb Guy, важно отметить, начинается ли массив с нуля и является последовательным. Поскольку вы можете выполнять присваивания и отменять несмежные индексы ${#array[@]}
, это не всегда следующий элемент в конце массива.
$ array=(a b c d e f g h)
$ 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
${array[@]: start[:count]}
Возвращает count elems. или, если не указано, все остальные i> elems. начиная с следующего элемента: - Если start & gt; = 0: от элемента. индекс которого & gt; = start. - Если start & lt; 0: от элемента. индекс которого равен (последний индекс массива + 1) - abs (начало); CAVEAT: если abs (начало) & gt; (последний индекс массива + 1), возвращается пустая строка. Если указано количество, возвращаемое количество элементов, даже если их индексы не смежны от начала.
– mklement0
21 September 2012 в 06:47
${array[-1]}
– Dennis Williamson
21 September 2012 в 16:02
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
, если у вас есть элементы с пробелами в них
– kbolino
17 March 2013 в 18:50
ARRAY
является просто заполнителем для фактического имени переменной. Даже если ваши индексы массива не i> последовательно, добавление с помощью+=
будет просто присвоено наивысшему индексу + 1. – mklement0 21 September 2012 в 04:01${myarray[@]}
- ссылка на переменную массива, как если бы она была скаляром, такая же, как и обращение к ее элементу 0; другими словами:$myarray
совпадает с${myarray[0]}
. – mklement0 13 May 2015 в 17:25