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

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}) 

En bash, l’expansion des accolades se produit avant l’expansion des variables, donc ce n’est pas directement possible.

Au lieu de cela, utilisez une arithmétique for boucle:

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

SORTIE

 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 

Vous devez utiliser eval :

 eval echo {$start..$end} 

Si vous n’avez pas de seq , vous voudrez peut-être restr avec une plaine pour la boucle

 for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo "" 

Êtes-vous sûr que c’est BASH? ZSH gère cela comme vous le souhaitez. Cela ne fonctionnera pas dans BASH, car l’expansion des accolades se produit avant tout autre type d’expansion, tel que l’expansion des variables. Vous devrez donc utiliser une méthode alternative.

Une raison particulière pour laquelle vous devez combiner les accolades et l’expansion des variables? Une approche différente de votre problème pourrait peut-être éviter cela.

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