Variables bash seq (remplacement de{1..10}) [en double]

cette question a déjà une réponse ici:

est-il possible de faire quelque chose comme ceci:

start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
42
demandé sur Tyilo 2011-05-31 21:20:22

7 réponses

dans bash, l'expansion du corset se produit avant l'expansion variable, donc ce n'est pas directement possible.

utilisez plutôt une boucle arithmétique for :

start=1
end=10
for ((i=start; i<=end; i++))
do
   echo "i: $i"
done

OUTPUT

i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10
45
répondu anubhava 2017-09-28 19:19:39

Vous devriez envisager d'utiliser seq(1) . Vous pouvez également utiliser eval:

eval echo {$start..$end}

et voici seq

seq -s' ' $start $end
20
répondu cnicutar 2011-05-31 17:24:38

vous devez utiliser eval :

eval echo {$start..$end}
7
répondu bmk 2011-05-31 17:23:54

si vous n'avez pas seq , vous pourriez vouloir coller avec une simple pour boucle

for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""
7
répondu glenn jackman 2011-05-31 17:45:05

êtes-vous sûr que ce soit BASH? ZSH gère cela comme vous voulez. Cela ne fonctionnera pas dans BASH parce que l'expansion de contreventement se produit avant tout autre type d'expansion, tel que l'expansion variable. Donc, vous devrez utiliser une autre méthode.

y a-t-il une raison particulière pour laquelle vous devez combiner l'accrochage et l'expansion variable? Peut-être qu'une approche différente de votre problème vous évitera d'avoir à le faire.

2
répondu Spencer Rathbun 2011-05-31 17:56:56

normalement, je fais juste ceci:

echo `seq $start $end`
1
répondu opsguy 2011-05-31 17:27:37

utilisez-s ex: seq-s '" 1 10 résultats: 1 2 3 4 5 6 7 8 9 10

0
répondu lantian0811 2017-08-27 07:17:39