unset array[0]
elimina el elemento pero aún así, si lo hago echo ${array[0]}
, obtengo un valor nulo, además, hay otras formas de hacerlo, pero si un elemento de una matriz contiene espacios como el siguiente
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
pero estos tampoco hacen el trabajo
array=${array[@]:1} #removed the 1st element
ahora quiero que la nueva matriz sea como
array[0]='mary'
array[1]='randy orton'
Los espacios causan el problema después de la asignación y la matriz real se vuelve como con la sustitución.
array=(mary randy orton)
bash
shell
shell-script
array
munish
fuente
fuente
Respuestas:
Simplemente use la sintaxis de matriz en la asignación y cite su variable:
Edite según la pregunta en el comentario. Para
$@
que pueda usarlo así:fuente
zsh
cuyos arreglos no son escasos, al contrario de ksh o bash.shift
?array=("${array[@]: -3}")
yset -- "${@: -3}"
. Tan atrapado en los índices.shift $[$#-3]
para los últimos 3 es probablemente mucho más rápido para$@
Esto me hizo pensar. El problema con sed / awk / tail es que son línea por línea. Después de eliminar la primera línea, debe escribir cada dos líneas desde el espacio del patrón al archivo.
Elimine la primera línea ya que la vuelve a volcar en el archivo.
Simplemente cambie el
largefile
nombre de su archivo.fuente
sed -i 1d largefile
en su lugar? Esto incluso funciona para archivos más grandes que RAM + swapPara eliminar un elemento en un índice particular, podemos usar
unset
y luego copiar a otra matriz. Solounset
que no se requiere en este caso. Debido aunset
que no elimina el elemento, simplemente establece una cadena nula para el índice particular en la matriz.La salida es
fuente
fuente