这个问题在这里已有答案:
假设我执行以下操作:
$ echo {10..20}
10 11 12 13 14 15 16 17 18 19 20
$ A=10
$ B=20
$ echo {${A}..${B}}
{10..20}
为什么这不会像第一次那样扩大?
我试图在脚本中设置一个“for”循环:
for i in {10..20}
do
echo ${i}
done
10
11
12
13
14
15
16
17
18
19
20
但如果我使用变量......
for i in {${A}..${B}}
do
echo ${i}
done
{10..20}
我尝试使用“eval”。没工作。
for i in `eval {${A}..${B}}`
...
我试过括号。没工作。
for i in "{${A}..${B}}"
...
我还能尝试什么,除了
seq ${A} ${B}
?
它没有按照定义扩展。取自bash手册:
序列表达式采用{x..y [.. incr]}的形式,其中x和y是整数或单个字符,incr是可选的增量,是整数。
和
在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。 Bash不对扩展的上下文或大括号之间的文本应用任何语法解释。
所以你必须提供整数或字符,并且解释是文本的,没有对括号之间的文本的解释。
我认为你除了使用seq
或其他类似循环的方法之外别无选择,你可以从头到尾处理一个变量。
尝试:
for ((i=A; i<=B; i++)) ; do
echo $i
done