unset array[0]
supprime l'élément mais quand même si je echo ${array[0]}
reçois une valeur nulle, 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 également à 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 causent des problèmes après l’affectation et le tableau réel devient comme avec une substitution.
array=(mary randy orton)
bash
shell
shell-script
array
munish
la source
la source
Réponses:
Utilisez simplement la syntaxe de tableau sur l'affectation et citez votre variable:
Modifier selon la question dans le commentaire. Pour que
$@
vous puissiez l'utiliser comme ceci:la source
zsh
les tableaux qui ne sont pas rares contrairement à ksh ou bash.shift
?array=("${array[@]: -3}")
etset -- "${@: -3}"
. Si coincé aux indices.shift $[$#-3]
pour les 3 derniers est probablement beaucoup plus rapide pour$@
Cela m'a fait réfléchir. Le problème avec sed / awk / tail est qu’ils sont alignés. Après avoir supprimé la première ligne, vous devez écrire toutes les autres lignes de l'espace de modèle dans le fichier.
Supprimez la première ligne au fur et à mesure que vous la déposez dans le fichier.
Il suffit de changer le
largefile
pour le nom de votre fichier.la source
sed -i 1d largefile
place? Cela fonctionne même pour les fichiers plus volumineux que la RAM + swapPour supprimer un élément à un index particulier, nous pouvons utiliser
unset
et ensuite copier dans un autre tableau. Justeunset
n'est pas nécessaire dans ce cas. Parceunset
que ne supprime pas l'élément, il définit simplement une chaîne null sur l'index particulier du tableau.La sortie est
la source
la source