假设我执行以下操作:
$ 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}
?
答案 0 :(得分:2)
根据定义,它不会扩展。摘自bash手册:
序列表达式的格式为{x..y [.incr]},其中x和y为 整数或单个字符,以及incr(可选的增量), 是整数。
和
在任何其他扩展以及任何其他扩展之前执行括号扩展 结果中保留了其他扩展专用的字符。它 是严格的文字。 Bash不应用任何语法解释 扩展的上下文或大括号之间的文本。
因此,您必须提供整数或字符,并且解释是文本形式的,括号之间不对文本进行解释。
我认为除了使用seq
或其他类似循环的方法(您需要从头到尾递增变量)之外,您别无选择。
答案 1 :(得分:1)
尝试:
for ((i=A; i<=B; i++)) ; do
echo $i
done