4 votes

Comment puis-je ajouter un mot à chaque élément du tableau dans Zsh ?

Je l'ai fait en Zsh :

array={geometry, analysis, topology, graph theory, calculus}
echo $array

et ensuite je voulais ajouter le mot "math :" à chaque élément comme "math:calculus" :

while (( i++ < 10)); { echo math:$array[i] }

Mais ça ne marche pas ? Pourquoi ?

0 votes

Um, vous êtes sûr que c'est ZSH ? Cela ne ressemble pas à la syntaxe d'initialisation de liste correcte pour moi...

4voto

Kyle Brandt Points 81077

Cela fonctionne bien pour moi dans zsh avec l'affectation modifiée de :

array={geometry, analysis, topology, graph theory, calculus}

à

array=(geometry, analysis, topology, graph theory, calculus)

Mais zsh possède des tonnes d'options qui modifient son comportement. Peut-être que la sortie 'setopt' peut aider.

0 votes

Aussi, assurez-vous de réinitialiser i à 0 à chaque fois que vous l'exécutez.

2voto

calandoa Points 1205

Fais-le :

array=(geometry analysis topology "graph theory" calculus)
print -l math:${^array}

ou vérifier RC_EXPAND_PARAM pour le ${^var} formulaire.

0voto

Curt Hagenlocher Points 12432

Je vais prendre un risque ici (parce que je n'accepte pas que le code de soutien soit correct) et dire que "echo math:$array[i]" n'a pas de signe de dollar et devrait être "echo math:$array[$i]".

0 votes

Avec le mien, le i n'a pas besoin du signe du dollar.

0 votes

Au moins, j'avais raison sur le fait que l'initialisation était bancale. L'exemple ZSH que j'ai regardé utilisait le sigle du dollar pour référencer la variable de la boucle.

0voto

jason saldo Points 5036

L'itération dans un tableau fonctionne mieux avec for car vous ne dépasserez pas la fin comme le fera votre code (à moins que vous ne fixiez une limite à la taille du tableau avec ${#array[*]}).

De plus, je suppose que vous ne voulez pas que les virgules soient incluses dans les chaînes de caractères et que vous devriez utiliser des parenthèses au lieu d'accolades pour votre tableau.

array=(geometry analysis topology "graph theory" calculus)
for i in $array; do echo math:$i; done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X