Tengo una matriz que contiene algunos elementos, pero quiero empujar nuevos elementos al comienzo de la matriz; ¿Cómo puedo hacer eso?
bash
shell-script
array
Gaurav KS
fuente
fuente
ARRAY+=('foo')
Respuestas:
Para agregar un elemento al comienzo de una matriz, use.
En general, lo harías.
Para agregar un elemento al final de una matriz, use.
O en su lugar
En general, lo harías.
Para agregar un elemento al índice específico de una matriz use.
Digamos que queremos agregar un elemento a la posición de Index2 arr [2] , de hecho nos fusionaríamos en las siguientes sub-matrices:
Obtenga todos los elementos con Index position2 hasta el último arr [2] , arr [3] , ....
Eliminar un elemento de la matriz
Además de eliminar un elemento de una matriz (digamos elemento # 2), necesitamos concatenar dos sub-matrices. La primera matriz secundaria contendrá los elementos antes del elemento # 2 y la segunda matriz secundaria contendrá los elementos después del elemento # 2.
${arr[@]:0:2}
obtendrá dos elementos arr [0] y arr [1] comienza desde el principio de la matriz.${arr[@]:3}
obtendrá todos los elementos desde index3 arr [3] hasta el último.Otra posibilidad para eliminar un elemento es
Utilizando
unset
(en realidad asigne un valor 'nulo' al elemento)Use el patrón de reemplazo si conoce el valor de sus elementos.
fuente
arr+=(element)
yunset arr[2]
(¡que debería serunset -v 'arr[2]'
!), Se asume que las matrices no son dispersas. También tenga en cuenta quearr=( "${arr[@]/PATTERN/}" )
no cambia el número de elementos. Todo lo que puede hacer es reemplazarlos con la cadena vacía.Tenga en cuenta que las matrices en
bash
(copiadas de ksh) son matrices más bien asociativas.haría una nueva
$a
matriz connewvalue
as${a[0]}
y los elementos de la matriz original adjuntos en el orden numérico de su clave con las teclas 1, 2 ...Por ejemplo, si tuvieras:
Eso explica por qué no hay un operador integrado para eso.
Si desea insertar el
newvalue
as${a[0]}
y cambiar todas las demás claves por una, necesitaría una matriz temporal:Los shells como
zsh
oyash
que tienen matrices normales tienen operadores para eso:zsh
:(también funciona para anteponer cadenas a variables escalares)
yash
:fuente
fuente