for循环数语法上限的bash变量

Jaw*_*ser 2 variables bash for-loop

如果我创建一个像这样的 bash 循环,使用文字数字,一切都按预期工作:

#!/bin/bash
for i in {1..10};  do
  echo $i 
done
Run Code Online (Sandbox Code Playgroud)

输出是:

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

但是如果我想在变量中使用上限,我似乎无法正确使用。这是我的四次尝试:

#!/bin/bash
n=10

for i in {1..$n};  do
  echo $i 
done

for i in {1.."$n"}; do 
  echo $i
done

for i in {1..${n}};  do
  echo $i 
done

for i in {1.."${n}"};  do
  echo $i 
done
Run Code Online (Sandbox Code Playgroud)

现在的输出是:

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

不是我想要的... :(

要清楚这个问题:

如何在 bash for 循环中使用变量作为范围语法的限制?

che*_*ner 8

不要使用{...}; 使用 C 风格的 for 循环。

for ((i=1; i <= $n; i++)); do
Run Code Online (Sandbox Code Playgroud)

大括号扩展发生在参数扩展之前,因此如果不使用eval. 这也更有效,因为您不需要在循环开始之前生成可能很大的索引列表。