当seq数是变量时,我在Bash中遇到内置序列(即:不使用seq)的问题。例如,这适用于打印我1 2 3:
for i in {1..3};do echo $i;done
但是这个:
bash-3.2 $ a = 3;对于i {1 .. $ a};请回显$ i;完成
失败并仅打印我{1..3}
这适用于ZSH,我知道我可以选择制作一个反制品,但想知道这是一个bug还是大括号扩展功能!
答案 0 :(得分:5)
在Bash中,在变量扩展之前执行大括号扩展。有关订单,请参阅Shell Expansions。
$ a=7; echo {1..3} {4..$a}
1 2 3 {4..7}
如果你想使用变量,请使用C样式的for
循环,如Shawn的答案。
答案 1 :(得分:4)
另一种方法是使用允许C风格循环的双括号结构:
A=3
for (( i=1; i<=$A; i++ )); do
echo $i
done
答案 2 :(得分:3)
$ num=3
$ for i in $( eval echo {1..$num});do echo $i;done
1
2
3
答案 3 :(得分:1)
其他选项是使用seq命令:
a=3; for i in $(seq 1 $a);do echo $i;done
答案 4 :(得分:1)
#!/bin/bash - see comment for list of obsolete bash constructs
function f_over_range {
for i in $(eval echo {$1..$2}); do
f $i
done
}
function f {
echo $1
}
#POSIX-compliant
f_over_range() {
for i in $(eval echo {$1..$2}); do
f $i
done
}
f() {
echo $1
}
f_over_range 0 5
f_over_range 00 05
注意:
答案 5 :(得分:0)
我还需要像以下那样做:
n =某个数字; {1 .. $ n..increment}
所以我使用了这个解决方法:
$ ./bin/pselect_abp
AAAAAAAAAAA
BBBBBBBBBBB
AAAAAAP
PPPPPPPPPPP
BBBBBBBBBBB
AAAAAAzz
AAAAA
BBBBBBBBBBB
AAAqA
答案 6 :(得分:-1)
试试这个:
$ start=3
$ end=5
$ echo {$(echo $start)..$(echo $end)}