Comment puis-je supprimer complètement un élément d'un tableau?

unset array[0] supprime l'élément, mais quand je fais echo ${array[0]} j'obtiens une valeur nulle et il y a d'autres façons de le faire mais si un élément d'un tableau contient des espaces comme ci-dessous

 array[0]='james young' array[1]='mary' array[2]='randy orton' 

mais ceux-ci échouent aussi à faire le travail

 array=${array[@]:1} #removed the 1st element 

maintenant je veux que le nouveau tableau soit comme

 array[0]='mary' array[1]='randy orton' 

Les espaces provoquent le problème après l'affectation et le tableau actuel devient comme avec la substitution.

 array=(mary randy orton) 

Utilisez simplement la syntaxe de tableau sur l'affectation et citez votre variable:

 array=("${array[@]:1}") #removed the 1st element 

Modifier selon la question dans le commentaire. Pour $@ vous pouvez l'utiliser comme ceci:

 set -- "${@:2}" #removed the 1st parameter 

Cela m'a fait réfléchir. Le problème avec Sed / awk / queue est qu'ils sont ligne par ligne. Après avoir effacé la première ligne, vous devez écrire toutes les deux lignes de l'espace des motifs vers le file.

  • Vous pouvez utiliser les commands suivantes pour faire ce que vous voulez en quelques secondes.
  • Cela écrira le file entier dans un tableau.
  • Supprimez la première ligne lorsqu'elle est renvoyée dans le file.

     readarray -t aLargeFile < <(cat largefile) echo "${aLargeFile[@]:1}" >largefile 

Il suffit de changer le grand file au nom de votre file.

 #!/bin/bash q=( one two three four five ) echo -e " (remove) { [:range:] } <- [:list:] | [:range:] => return list with range removed range is in the form of [:digit:]-[:digit:] " function remove { if [[ $1 =~ ([[:digit:]])(-([[:digit:]]))? ]]; then from=${BASH_REMATCH[1]} to=${BASH_REMATCH[3]} else echo bad range fi;shift array=( ${@} ) local start=${array[@]::${from}} local rest [ -n "$to" ] && rest=${array[@]:((${to}+1))} || rest=${array[@]:((${from}+1))} echo ${start[@]} ${rest[@]} } q=( `remove 1 ${q[*]}` ) echo ${q[@]} ~ ~