Je veux utiliser une chaîne pour contrôler A pour boucle dans Bash. Mon premier code de test produit ce que je voudrais attendre et ce que je veux: J'aimerais utiliser quelque chose comme ce qui suit. Cela ne donne pas la sortie que j'aimerais (je peux voir pourquoi cela fait ce qu'il fait). P> $ aa='1..4'
$ for ii in $aa; do echo $ii; done
1..4
4 Réponses :
bash ne fera pas Expansion de BRACE avec des variables, mais vous pouvez utiliser EVAL CODE>:
IFS=. arr=($aa)
for ((ii=arr[0]; ii<arr[2]; ii++)); do echo $ii; done
La notation pourrait être écrite comme suit: mais le où les 1 ou les 4 ou les deux peuvent être des variables de coque. P> < / p> {1..4} code> doit être écrit comme ça, aucune variables n'est impliquée, et pas à la suite d'une substitution variable. C'est Expansion de Brace dans le manuel Bash, et il arrive avant les expansions des chaînes, etc. Vous serez probablement mieux en utilisant: p>
L'utilisation de SEQ code> me fait interroger l'ensemble string i> chose, puisqu'un arithmétique
pour code> la boucle est presque certainement mieux.
C'est une autre façon de le faire, @kojiro, à coup sûr. Cela pourrait être mieux. J'ai toujours tendance à utiliser des notations shell qui ne sont pas exclusives à Bash, mais la question est marquée bash code> afin que vous puissiez fournir cela comme une réponse alternative.
Vous pouvez utiliser la commande SEQ code> (voir
homme SEQ code>).
Cela n'accepte pas une chaîne en tant qu'entrée que celle décrite par la question.
Un moyen de réaliser cela est en appelant Je suppose, cependant, que votre entrée est en effet une chaîne dans le format que vous avez mentionné, c'est-à-dire Une des façons d'atteindre cet objectif est la suivante: P> SEQ code>. Il serait trivial si vous connaissez les chiffres dans la corde à l'avance, il n'y aurait donc pas besoin de faire de la conversion, comme vous pouvez le simple faire
SEQ 1 4 code> ou
SEQ $ A $ B Pour cette affaire. P>
1..4 code> ou
ou
20..100 code>. Pour cette fin, vous pouvez convertir la chaîne en 2 numéros les ANS les utilisez comme paramètres pour
SEQ code>. P>
$ x="10..15"
$ `echo $x | tr "." " " | awk '{print "seq", $1, $2}'`
10
11
12
13
14
15
Pourquoi voulez-vous utiliser une chaîne pour créer une séquence de chiffres? Pouvez-vous donner un exemple où
pour ((i = 1; i <5; i ++)); fais …; fait code> est insuffisant?