Gilles segunda respuesta es correcta si desea eliminar todas las apariciones, pero es una reasignación total de la matriz y no se refiere a la situación donde desea eliminar solo una entrada, independientemente de los duplicados.Hay una manera en zsh para eliminar un elemento de una matriz normal sin reasignación de toda la matriz:
Dada la siguiente matriz:
array=(abc def ghi)
la siguiente devolverá el índice del primer partido para def
:
${array[(i)def]}
y el formato siguiente se puede utilizar para eliminar cualquier valor indexado dado (el índice de elemento 2 en este ejemplo) en una matriz sin reasignación de toda la matriz:
array[2]=()
por lo tanto, para quitar el valor def
que combinar los dos:
array[$array[(i)def]]=()
Esto es más limpio para la eliminación de un solo elemento, ya que no hay matriz explícita reasignación (limpiador en que los posibles efectos secundarios, tales como la eliminación accidental de elementos vacíos, problemas de formato citados, etc. no aparecerán). Sin embargo, la solución de Gilles es en gran medida equivalente y tiene la ventaja de eliminar múltiples elementos coincidentes, si eso es lo que quieres. Con su método y este método, tiene un conjunto de herramientas completo para la eliminación de elementos de matriz estándar.
Esto se ve bastante complicado. Además, ¿cómo obtengo '$ i'? Solo quiero eliminar 'b'. – Albert
@Albert: He agregado cómo eliminar por contenido. – Gilles
Gracias, esa adición es exactamente lo que quería. – Albert