2012-02-24 112 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