2012-02-24 105 views
0
回路列表

我试图做这样的事情在shell脚本:对于shell脚本

STEP=5 
LIST=[1-$STEP] 

for i in $LIST 
    echo $i 
done 

我期望的输出是:

1 2 3 4 5 

我大概有前(如看到这种用法[AZ ]),但我不记得正确的语法。感谢您的帮助!

+0

像这样也许:http://stackoverflow.com/questions/169511/how-do -i-iterate-a-range-of-numbers-in-bash – minopret 2012-02-24 05:34:09

回答

1

试试这个。请注意,您使用包含LF的echo命令。使用echo -n以获取在同一行上输出,如图

STEP=5 
for i in `seq 1 $STEP`; do 

echo $i 

done 
+0

请注意'seq'不是POSIX实用程序,可能无法使用。不应该使用'echo -n';使用'printf'来代替,它可以轻松地抑制换行符。 – Jens 2013-05-22 09:32:20

0

假设这是bash下

$ echo {1..5} 
1 2 3 4 5 
$ STEP=5 
$ echo {1..$STEP} 
{1..5} 
$ eval echo {1..$STEP} 
1 2 3 4 5 
+1

这是很棒的,直到你在一个名为“1”的文件的目录中运行它,因为某些骨头类型的重定向错误。然后{1..5}扩展为“1”,并花费*小时*尝试诊断问题。 :) 除非您使用noglob,因为您之前完成了此操作,并且再也不想再遇到这个问题。 – dannysauer 2012-04-08 03:16:57

+0

@dannysauer Brace扩展不是文件名称通配符。 'echo {1..5}'输出'1 2 3 4 5'是否存在名为'1'的文件。你用'echo [1-5]'来混淆这个吗? – Jens 2013-05-22 09:28:21

+0

@dannysauer,自己验证:记录扩展的bash序列:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions – 2013-05-22 14:41:48