当 seq 编号是变量时,我在 Bash 中遇到内置序列(即:不使用 seq)的问题。例如,这有效并打印我 1 2 3:
for i in {1..3};do
echo $i
done
但是这个 :
a=3
for i in {1..$a};do
echo $i
done
失败并仅打印我 {1..3}
这适用于 ZSH,我知道我有另一种方法来制作计数器,但想知道这是错误还是大括号扩展功能!
在 Bash 中,大括号扩展是在变量扩展之前执行的。有关订单,请参阅外壳扩展。
$ a=7; echo {1..3} {4..$a}
1 2 3 {4..7}
如果要使用变量,请使用for
Shawn 的答案中的 C 样式循环。
另一种方法是使用允许 C 样式循环的双括号结构:
A=3
for (( i=1; i<=$A; i++ )); do
echo $i
done
$ num=3
$ for i in $( eval echo {1..$num});do echo $i;done
1
2
3
#!/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
笔记:
其他选项是使用 seq 命令:
a=3; for i in $(seq 1 $a);do echo $i;done
我还需要做类似的事情:
n=某个数字;{1..$n..增量}
所以我使用了这个解决方法:
n=100
i=1
while [ $i -lt $n ]
do
echo $i
i=$(( $i+1 ))
done
尝试这个:
$ start=3
$ end=5
$ echo {$(echo $start)..$(echo $end)}