Script bash - variables entre accolades [dupliquer]

Nov 13 2020

Le script bash suivant

#!/bin/bash

startNumber=$(( 1 )) endNumber=$(( $startNumber + 3 )) #for number in {$startNumber..$endNumber} for number in {1..4} do echo $number
done

exit 0

donne le rendement souhaité

1
2
3
4

Cependant, lorsque je change la boucle non commentée et commentée for, la sortie est

{1..4}

Qu'est-ce que je fais mal?

Réponses

8 jesse_b Nov 13 2020 at 13:22

Les variables ne se développeront pas dans l' expansion d'accolades . Vous pourriez faire:

for ((number=startNumber; number<=endNumber; number++)); do
    echo "$number"
done

En outre, il n'y a aucune raison d'utiliser l' expansion arithmétique pour startNumbervous devez simplement faire:
startNumber=1.

De plus, vous n'avez pas besoin d'utiliser $pour développer des variables dans l'expansion arithmétique, ce endNumberpourrait être:
endNumber=$((startNumber+3))

8 bxm Nov 13 2020 at 13:32

Comme expliqué ailleurs, l'extension ne fonctionnera pas. Autre façon d'obtenir votre séquence de nombres:

for number in $(seq $startNumber $endNumber) do echo $number
done