Script Bash: variables entre llaves [duplicado]

Nov 13 2020

El siguiente script de bash

#!/bin/bash

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

exit 0

da la salida deseada

1
2
3
4

Sin embargo, cuando cambio el bucle for comentado y no comentado, la salida es

{1..4}

¿Qué estoy haciendo mal?

Respuestas

8 jesse_b Nov 13 2020 at 13:22

Las variables no se expandirán dentro de la expansión de llaves . Podrías hacerlo:

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

Además, no hay ninguna razón para utilizar expansión aritmética para startNumbersimplemente debe hacer:
startNumber=1.

Además, no necesita usar $para expandir variables dentro de la expansión aritmética, por lo que endNumberpodría ser:
endNumber=$((startNumber+3))

8 bxm Nov 13 2020 at 13:32

Como se explicó en otra parte, la expansión no funcionará. Manera alternativa de obtener su secuencia de números:

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