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})
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
Vous devriez envisager d'utiliser seq(1)
. Vous pouvez également utiliser eval:
eval echo {$start..$end}
et voici seq
seq -s' ' $start $end
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 ""
ê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.
utilisez-s ex: seq-s '" 1 10 résultats: 1 2 3 4 5 6 7 8 9 10