在for循环中取消引用bash / ksh脚本中的变量

时间:2018-09-04 18:01:19

标签: bash for-loop ksh

假设我执行以下操作:

$ 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}

2 个答案:

答案 0 :(得分:2)

根据定义,它不会扩展。摘自bash手册:

  

序列表达式的格式为{x..y [.incr]},其中x和y为   整数或单个字符,以及incr(可选的增量),   是整数。

  

在任何其他扩展以及任何其他扩展之前执行括号扩展   结果中保留了其他扩展专用的字符。它   是严格的文字。 Bash不应用任何语法解释   扩展的上下文或大括号之间的文本。

因此,您必须提供整数或字符,并且解释是文本形式的,括号之间不对文本进行解释。

我认为除了使用seq或其他类似循环的方法(您需要从头到尾递增变量)之外,您别无选择。

答案 1 :(得分:1)

尝试:

for ((i=A; i<=B; i++)) ; do
    echo $i
done