在for循环中重新引用bash / ksh脚本中的变量[duplicate]

问题描述 投票:0回答:2

这个问题在这里已有答案:

假设我执行以下操作:

$ 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 for-loop ksh
2个回答
2
投票

它没有按照定义扩展。取自bash手册:

序列表达式采用{x..y [.. incr]}的形式,其中x和y是整数或单个字符,incr是可选的增量,是整数。

在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。 Bash不对扩展的上下文或大括号之间的文本应用任何语法解释。

所以你必须提供整数或字符,并且解释是文本的,没有对括号之间的文本的解释。

我认为你除了使用seq或其他类似循环的方法之外别无选择,你可以从头到尾处理一个变量。


1
投票

尝试:

for ((i=A; i<=B; i++)) ; do
    echo $i
done
© www.soinside.com 2019 - 2024. All rights reserved.