D'après mon expérience avec les langages de programmation et de script modernes, je pense que la plupart des programmeurs sont généralement habitués à faire référence au premier élément d'un tableau par 0 comme index.
Y a-t-il des avantages substantiels à utiliser 1 ?
Je suis sûr que j'ai entendu parler de plus de langues autres que Zsh se comportant de manière similaire avec les tableaux; c'est bien pour moi, car c'est tout aussi pratique.
Cependant, comme les langages de script shell déjà publiés et largement utilisés tels que ksh et bash utilisent tous 0, pourquoi quelqu'un choisirait-il de modifier ce "standard" commun?
Ma réponse immédiate à ma question serait «bien sûr que non»;
alors, la seule explication à laquelle je peux penser concernant cette "fonctionnalité exclusive" aux shells serait " ils ont juste fait ça pour montrer un peu plus leur cool shell ".
Je ne connais pas grand-chose ni à Zsh ni à son histoire, et il y a de fortes chances que ma théorie triviale à ce sujet n'a aucun sens.
Y a-t-il une explication à cela? Ou est-ce simplement par goût personnel?
csh
, qui a également utilisé une indexation de tableau à base unique.Réponses:
awk
,tcl
au moins, et les outils généralement utilisés de la coque (cut -f1-3
,head -n 3
,sort -k1,3
,cal 1 2015
,comm -1
) commencent à 1.sed
,ed
,vi
nombre de leurs lignes de 1 ...$@
commence à 1. zsh est cohérent avec sa gestion de$@
(comme dans Bourne) ou$argv
(comme dans csh). Voyez à quel point il est déroutant dansksh
où${@:0:1}
ne vous donne pas le premier paramètre de position par exemple.$a[1]
. Cela signifie également que le nombre d'éléments est le même que le dernier indice (en zsh comme dans la plupart des autres shells sauf ksh, les tableaux ne sont pas rares).a[1]
pour le premier élément est cohérent aveca[-1]
pour le dernier.Donc, OMI, la question devrait plutôt être: qu'est - ce qui est entré dans la tête de David Korn pour que ses tableaux commencent à 0?
la source
$0
n'est pas un paramètre de position. Cela ne fait pas partie de$@
."$@"
est"$1" "$2" ...
. En ce qui concerne les fonctions, dans de nombreux shells, vous voyez que ce"$@"
sont les arguments de la fonction, tout en$0
restant le chemin du script (ou shell argv [0] lorsque vous n'exécutez pas de script)Je pense que la réponse la plus plausible à cela est le tableau inversé intégré de
zsh
Si vous avez un tableau avec 4 éléments, disons
myvar=(1 2 3 4)
et vous voulez accéder au 4ème élément, ce seraprint $myvar[4]
, non?Cependant, si vous voulez créer une boucle qui listera les éléments à l'intérieur de ce tableau à l'envers, il suffit d'utiliser des index négatifs:
Cela devrait expliquer car à partir de zéro, vous n'atteindrez pas l'un de ces éléments car il n'y en a pas
-0
.La deuxième raison derrière cela est probablement que le code C lié aux variables sur zsh utilise
int
oudouble int
pour définir des index de tableau, et puisqu'il utilise Two's Complement pour représenter des nombres négatifs, il n'y a aucun moyen de représenter-0
( Signé zéro ), comme vous pouvez le faire sur float variables ponctuelles.Si vous êtes vraiment habitué aux index commençant à 0, je vous suggère d'utiliser l'
KSH_ARRAYS
option pour résoudre ce problème.Et en prenant le crochet du commentaire @cuonglm, les
csh
fonctionnalités implémentéeszsh
sont expliquées ici . Cela ne semble pas être une raison historique mais un moyen de fournir un environnement de travail confortable à ceux qui sontcsh
la source
-
par~
.bash
. Je pense qu'il gère les indices négatifs pour les éléments définis comme du sucre de syntaxe, mais ne le fait pas autrement. ne me souviens pas. de mon point de vue, les gens devraient simplement créer un répertoire et utiliser des fichiers pour tout ce qu'ils fourrent dans tout cet état shell. vous pouvez indexer ces éléments comme bon vous semble.~
est l'inversion binaire.~0
est-1
. (tous les bits retournés, dépendent de la façon dont les nombres négatifs sont généralement représentés par bits). Sur un tableau non défini ou un tableau avec un seul élément d'indice 0, un [0], un [-0], un [-1] et un [~ 0] vous donneront la même chose dans un tableau de type ksh.~
quand ça-index
n'a pas marché. Je suppose que tout ce que j'ai fait est probablement~-index
. Ouais. ça sonne bien. Oui! et bien sûr, cela fonctionne aussi pour les éléments non définis. donc je suppose que le commentaire ci-dessus devrait être - pour les tableaux indexés 0, ajoutez~
. je suppose qu'il a juste géré la partie -1 plus facilement peut-être. je ne sais pas. ce n'est pas sauter au premier plan de ma mémoire pour le moment ...