2011-06-19 22 views
1

我exfile命名爲(每行4號)的文件:殼牌printf的:無效的號碼錯誤

200807 0 96 200807 

我想讀這個文件,並使用所有4個數字。

我的shell腳本是:

while read line 
do 
    echo ${line} 
    set ${line} 
    echo "${1} ${2} ${3} ${4}" 
    declare -i start 
    declare -i end 
    start=`expr ${2}/1` 
    end=`expr ${3}/1` 
    for i in {${start}..${end}} 
    do 
     picnum=`printf "%03d" $i` 
     echo ${picnum} 
    done 
done < exfile 

的錯誤是printf: {0..96}: invalid number

如果刪除了行:

declare -i start 
declare -i end 
start=`expr ${2}/1` 
end=`expr ${3}/1` 

的錯誤是一樣的。我添加這些行來將字符串轉換爲整數。

任何想法爲什麼?非常感謝。

=============================================

更新:下面的代碼工作:參數擴展之前

while read line 
do 
    echo ${line} 
    set ${line} 
    echo "${1} ${2} ${3} ${4}" 
    for i in $(seq ${2} ${3}) 
    do 
     picnum=`printf "%03d" $i` 
     echo ${picnum} 
    done 
done < exfile 
+0

你不需要從字符串「轉換」的數字。外殼不是強類型的。無論如何,命令的參數都是字符串,如果該命令需要將參數解釋爲數字,它將會。 –

回答

4

括號擴展情況。 "{${start}..${end}}"不是有效的大括號擴展表達式,因此未展開。改爲使用seq

+0

感謝您指出我的錯誤。但我並不熟悉seq。你能給我一個提示嗎? – DocWiki

+0

您是否嘗試過man page? –

+0

問題解決了!感謝你的幫助。代碼是'for $ in $(seq $ {2} $ {3})'' – DocWiki

2

for循環應該是這樣的:

for((i=$2;i<=$3;i++))