Script Bash - variabili tra parentesi graffe [duplicato]

Nov 13 2020

Il seguente 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à l'output desiderato

1
2
3
4

Tuttavia, quando cambio il ciclo non commentato e commentato, l'output è

{1..4}

Che cosa sto facendo di sbagliato?

Risposte

8 jesse_b Nov 13 2020 at 13:22

Le variabili non si espandono all'interno dell'espansione delle parentesi graffe . Potresti fare:

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

Inoltre, non v'è alcuna ragione per usare espansione aritmetica per startNumbersi dovrebbe fare semplicemente:
startNumber=1.

Inoltre, non è necessario utilizzare $per espandere le variabili all'interno dell'espansione aritmetica, quindi endNumberpotrebbe essere:
endNumber=$((startNumber+3))

8 bxm Nov 13 2020 at 13:32

Come spiegato altrove, l'espansione non funzionerà. Modo alternativo per ottenere la sequenza di numeri:

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