4

The following bash script

#!/bin/bash

startNumber=$(( 1 )) endNumber=$(( $startNumber + 3 ))

#for number in {$startNumber..$endNumber} for number in {1..4} do echo $number done

exit 0

gives the desired output

1
2
3
4

However, when I switch the uncommented and commented for loop, the output is

{1..4}

What am I doing wrong?

Kusalananda
  • 333,661
Andrej
  • 143

2 Answers2

8

Variables won't expand inside brace expansion. You could do:

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

Also, there is no reason to use arithmetic expansion for startNumber you should simply do:
startNumber=1.

Additionally, you don't need to use $ to expand variables inside arithmetic expansion, so endNumber could be:
endNumber=$((startNumber+3))

Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255
jesse_b
  • 37,005
8

As explained elsewhere the expansion won't work. Alternative way to get your sequence of numbers:

for number in $(seq $startNumber $endNumber)
do
  echo $number
done
bxm
  • 4,855