Eu tenho uma matriz que contém alguns elementos, mas quero enviar novos itens para o início da matriz; Como faço isso?
bash
shell-script
array
Gaurav KS
fonte
fonte
ARRAY+=('foo')
Respostas:
Para adicionar um elemento ao início de uma matriz, use.
Geralmente, você faria.
Para adicionar um elemento ao final de uma matriz, use.
Ou então
Geralmente, você faria.
Para adicionar um elemento ao índice específico de uma matriz, use.
Digamos que queremos adicionar um elemento à posição do Index2 arr [2] , na verdade, nos fundiremos abaixo das sub-matrizes:
Obtenha todos os elementos com a posição Index2 até o último arr [2] , arr [3] , ....
Removendo um elemento da matriz
Além de remover um elemento de uma matriz (digamos o elemento 2), precisamos concatenar duas sub-matrizes. O primeiro sub-array reterá os elementos antes do elemento 2 e o segundo sub-array conterá os elementos após o elemento 2.
${arr[@]:0:2}
receberá dois elementos arr [0] e arr [1] começa no início da matriz.${arr[@]:3}
irá obter todos os elementos do index3 arr [3] para o último.Outra possibilidade de remover um elemento é
Usando
unset
(na verdade, atribua valor 'nulo' ao elemento)Use o padrão de substituição se você souber o valor de seus elementos.
fonte
arr+=(element)
eunset arr[2]
(que deve serunset -v 'arr[2]'
!), Que assume matrizes não-esparsos. Observe também que oarr=( "${arr[@]/PATTERN/}" )
não altera o número de elementos. Tudo o que pode fazer é substituí-los pela string vazia.Observe que matrizes
bash
(copiadas do ksh) são matrizes bastante associativas.criaria uma nova
$a
matriz comnewvalue
as${a[0]}
e os elementos da matriz original anexados na ordem numérica de sua chave com as teclas 1, 2 ...Por exemplo, se você tivesse:
Isso explica por que não há um operador interno para isso.
Se você deseja inserir o
newvalue
as${a[0]}
e mudar todas as outras chaves por uma, precisará de uma matriz temporária:Os shells como
zsh
ouyash
que possuem matrizes normais têm operadores para isso:zsh
:(também funciona para anexar sequências a variáveis escalares)
yash
:fonte
fonte