bash中的序列表达式

时间:2009-12-17 22:37:49

标签: bash

我习惯使用bash的以下功能:

for i in ${1..23} ; do echo $i ; done

这不概括。例如,将23替换为偶数$p不起作用。正如文档所说,这是一个纯粹的语法特征。

你会用什么替换它?

注意:当然,这可以使用while和辅助变量来完成,但这不是我正在寻找的,即使它有效。我实际上没有回到这一点。

4 个答案:

答案 0 :(得分:3)

你可以使用seq工具来达到效果,我不知道你的用例是否合适

~$ P=3 && for i in `seq 1 $P`; do echo $i; done
1
2
3

或litb的建议

~$ P=3 && for ((i=1;i<=$P;i++)); do echo $i; done
1
2
3

答案 1 :(得分:1)

如果有可用的话,seq命令可以执行类似的操作。那么你的例子可能是:

p=23
for i in `seq 1 $p`
do
    echo $i
done

答案 2 :(得分:1)

在linux上,有一个seq命令(不幸的是它在OS X中缺失)。

#!/bin/bash
p=23
for i in `seq 1 $p`;
do
    echo $i
done    

OS X解决方法:http://scruss.com/blog/2008/02/08/seq-for-os-x/comment-page-1/

答案 3 :(得分:1)

$ p=18
$ a='{1..$p}'
$ for num in $( eval echo $(eval echo $a) ); do echo $num; done