Bash 脚本 - 花括号中的变量

And*_*rej 4 bash brace-expansion for

以下 bash 脚本

#!/bin/bash

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

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

exit 0
Run Code Online (Sandbox Code Playgroud)

给出所需的输出

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

但是,当我切换未注释和注释的 for 循环时,输出是

{1..4}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jes*_*e_b 8

变量不会在大括号扩展内扩展。你可以这样做:

for ((number=startNumber; number<=endNumber; number++)); do
    echo "$number"
done
Run Code Online (Sandbox Code Playgroud)

此外,没有理由使用算术扩展,因为startNumber您应该简单地执行:
startNumber=1.

此外,您不需要用于$在算术扩展中扩展变量,因此endNumber可能是:
endNumber=$((startNumber+3))


bxm*_*bxm 8

正如其他地方所解释的,扩展将不起作用。获取数字序列的替代方法:

for number in $(seq $startNumber $endNumber)
do
  echo $number
done
Run Code Online (Sandbox Code Playgroud)