for循环范围内的bash变量

for循环范围内的bash变量

我想打印从 1 到 100 的数字列表,我使用 for 循环,如下所示:

number=100
for num in {1..$number}
do
  echo $num
done

当我执行该命令时,它只打印 {1..100} 而不是 1 到 100 的数字列表。

答案1

是的,那是因为大括号扩展发生在参数扩展之前。使用另一个 shell,例如zshorksh93或使用替代语法:

标准 (POSIX) sh 语法

i=1
while [ "$i" -le "$number" ]; do
  echo "$i"
  i=$(($i + 1))
done

Ksh式for ((...))

for ((i=1;i<=number;i++)); do
  echo "$i"
done

使用eval(不推荐)

eval '
  for i in {1..'"$number"'}; do
    echo "$i"
  done
'

seq在可用的系统上使用 GNU命令

unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
  echo "$i"
done

(该命令的效率较低,因为它分叉并运行一个新命令,并且 shell 必须从管道读取其输出)。

避免 shell 中出现循环。

在 shell 脚本中使用循环通常表明您做得不正确。

最有可能的是,您的代码可以用其他方式编写。

答案2

您甚至不需要 for 循环,只需使用以下seq命令:

$ seq 100

例子

这是打印出来的前 10 个数字:

$ seq 100 | head -10
1
2
3
4
5
6
7
8
9
10

答案3

您可以使用以下内容:

for (( num=1; num <= 100; num++ ))
do
    echo $num
done

答案4

大括号扩展仅适用于文字整数或单个字符。它发生在变量扩展之前,因此不能在其中使用变量。

相关内容