当seq编号是变量时,我在Bash中的内建序列(即:不使用seq)存在问题。例如,此工作和打印箱1 2 3:序列扩展和bash中的变量
for i in {1..3};do echo $i;done
但这:
的bash-3.2 $一个= 3;对于i在{1 .. $一个};做回声$我;做
失败,并打印我{} 1..3仅
这适用于ZSH,我知道我有一个替代方案,使计数器的事情,但不知道是否这是一个错误或支柱扩展功能!
当seq编号是变量时,我在Bash中的内建序列(即:不使用seq)存在问题。例如,此工作和打印箱1 2 3:序列扩展和bash中的变量
for i in {1..3};do echo $i;done
但这:
的bash-3.2 $一个= 3;对于i在{1 .. $一个};做回声$我;做
失败,并打印我{} 1..3仅
这适用于ZSH,我知道我有一个替代方案,使计数器的事情,但不知道是否这是一个错误或支柱扩展功能!
在bash,支架膨胀变量扩展之前进行。订单请参阅Shell Expansions。
$ a=7; echo {1..3} {4..$a}
1 2 3 {4..7}
如果要使用变量,请使用C样式for
循环,如Shawn的答案中所述。
$ num=3
$ for i in $(eval echo {1..$num});do echo $i;done
1
2
3
看起来像一种黑客给我...但是,谢谢.. – 2011-02-10 11:41:15
比C风格的循环效率低(由于使用一个子外壳)并承担安全风险:除非完全控制或验证了传递给`eval`的字符串中使用的变量的值,否则不要使用`eval`。否则,可能会执行任意命令。例如,以下精心设计的`$ num`值将枚举当前用户的主文件夹中的文件: `num ='}; ls〜; {';我在$(eval回声{1 .. $ num});做echo $ i;完成` – mklement0 2016-06-23 03:19:03
另一种方法是使用双括号构建体,其允许C样式循环:
A=3
for ((i=1; i<=$A; i++)); do
echo $i
done
嗨,我不感兴趣使用外部命令,但内部bash内建。 – 2011-02-10 11:40:40
他不想使用`seq` – kurumi 2011-02-10 11:40:57
另一种选择是使用序列命令:
a=3; for i in $(seq 1 $a);do echo $i;done
试试这个:
$ start=3
$ end=5
$ echo {$(echo $start)..$(echo $end)}
我也需要做somenthing,如:
N =一些数量; {1 .. $ n..increment}
所以就用该替代方法:
n=100
i=1
while [ $i -lt $n ]
do
echo $i
i=$(($i+1))
done
的[在bash脚本传递到用于环路参数](
可能重复http://stackoverflow.com/ question/4764383/arguments-passed-in-for-loop-in-bash-script) – 2011-02-10 11:40:28