Est-il possible de faire quelque chose comme ça:
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
Dans bash, le développement d'accolade a lieu avant le développement de variable, ce qui n'est donc pas directement possible.
Au lieu de cela, utilisez une boucle arithmétique for
:
start=1
end=10
for ((i=start; i<=end; i++))
do
echo "i: $i"
done
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 voudrez peut-être vous en tenir à une simple boucle
for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""
Vous devez utiliser eval
:
eval echo {$start..$end}
Etes-vous certain que ce soit BASH? ZSH le gère comme vous le souhaitez. Cela ne fonctionnera pas dans BASH car le développement d'accolade a lieu avant tout autre type de développement, tel que le développement variable. Vous devrez donc utiliser une méthode alternative.
Une raison particulière pour laquelle vous avez besoin de combiner un croisement avec une expansion variable? Peut-être qu'une approche différente de votre problème éliminera la nécessité de le faire.
Normalement je fais juste ça:
echo `seq $start $end`
use -s ex: seq -s '' 1 10 sortie: 1 2 3 4 5 6 7 8 9 10