GNU/Linux >> Tutoriels Linux >  >> Linux

Comportement des tableaux dans les scripts bash et le shell zsh (index de début 0 ou 1 ?)

TL; DR :

  • bash l'indexation du tableau commence à 0 (toujours)
  • zsh l'indexation du tableau commence à 1 (sauf si l'option KSH_ARRAYS est défini)

Pour toujours obtenir un comportement cohérent, utilisez :

${array[@]:offset:length}

Explication

Pour le code qui fonctionne à la fois dans bash et zsh , vous devez utiliser le offset:length syntaxe plutôt que le [subscript] syntaxe.

Même pour zsh -uniquement le code, vous devrez toujours le faire (ou utiliser emulate -LR zsh ) depuis zsh La base d'abonnement au tableau de est déterminée par le KSH_ARRAYS option.

Par exemple, pour référencer le premier élément d'un tableau :

${array[@]:0:1}

Ici, array[@] est tous les éléments, 0 est le décalage (qui toujours est basé sur 0) et 1 est le nombre d'éléments souhaités.


Les tableaux dans Bash sont indexés à partir de zéro, et dans zsh, ils sont indexés à partir de un.

Mais vous n'avez pas besoin des index pour un cas d'utilisation simple comme celui-ci. Boucle sur ${array[@]} fonctionne dans les deux :

files=(file*)
for f in "${files[@]}"; do
    echo "$f"
done

En zsh, vous pouvez également utiliser $files au lieu de "${files[@]}" , mais cela ne fonctionne pas dans Bash. (Et il y a la légère différence qu'il supprime les éléments de tableau vides, mais vous n'en obtiendrez aucun des noms de fichiers.)

N'utilisez pas non plus $(ls file*) , il se cassera si vous avez des noms de fichiers avec des espaces (voir WordSpliting sur BashGuide), et est complètement inutile pour commencer.

Le shell est parfaitement capable de générer des noms de fichiers par lui-même. C'est en fait ce qui va se passer là-bas, le shell trouve tous les fichiers dont les noms correspondent à file* , les transmet à ls , et ls il suffit de les imprimer à nouveau pour que le shell les lise et les traite.


Linux
  1. Comment programmer avec Bash :syntaxe et outils

  2. Bash tableau de tableaux?

  3. Comment comparer des chaînes dans les scripts shell bash

  4. Tableaux bash avec exemples

  5. Qu'est-ce que <() dans bash (et =() dans zsh) ?

Bash Scripting - Tableau indexé expliqué avec des exemples

Comment installer et utiliser ZSH Shell sous Linux

Installez Awesome Zsh et faites-en le shell par défaut

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

Shell Scripting Part4 - Entrée, sortie et redirection

Bash Scripting :comment générer et formater du texte sur le shell Linux