Script Bash - variáveis ​​entre chaves [duplicado]

Nov 13 2020

O seguinte script bash

#!/bin/bash

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

exit 0

dá a saída desejada

1
2
3
4

No entanto, quando eu troco o loop for não comentado e comentado, a saída é

{1..4}

O que estou fazendo errado?

Respostas

8 jesse_b Nov 13 2020 at 13:22

As variáveis ​​não se expandem dentro da expansão da chave . Você poderia fazer:

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

Além disso, não há nenhuma razão para usar expansão aritmética para startNumbervocê deve simplesmente fazer:
startNumber=1.

Além disso, você não precisa usar $para expandir variáveis ​​dentro da expansão aritmética, então endNumberpoderia ser:
endNumber=$((startNumber+3))

8 bxm Nov 13 2020 at 13:32

Conforme explicado em outro lugar, a expansão não funcionará. Maneira alternativa de obter sua sequência de números:

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