I would like to set a variable (x=100) in the brackets such as
x=100
for i in {0.."$x"..50} ;do
echo $i
done
the desire output for i should be
0
50
100
although I get as an output
{0..100..50}
I would like to set a variable (x=100) in the brackets such as
x=100
for i in {0.."$x"..50} ;do
echo $i
done
the desire output for i should be
0
50
100
although I get as an output
{0..100..50}
That syntax would work in zsh (where it comes from) or ksh93 or yash -o braceexpand
, but not in bash
where you can't use expansions within {x..y}
. But here, it would be better to use ksh93-style for ((...))
loops anyway:
x=100
for ((i = 0; i <= x; i += 50)) {
printf '%s\n' "$i"
}
That simply is not possible in bash
. If you see the order of expansions in bash
, the variable expansion, happens at a latter time than the time the shell expands the brace {0..50}
. So at the time of brace expansion, the shell sees the construct as {0..$x..50}
which would be an invalid construct to expand.
You need an alternate way to this, best way would be a for
loop in bash
arithmetic context.
for ((i=0; i<=100; i+=50)); do
printf "%d\n" "$i"
done