Shell Printf:无效数字错误

时间:2011-06-19 03:01:14

标签: linux shell command-line

我有一个名为exfile的文件(每行4个数字):

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

2 个答案:

答案 0 :(得分:4)

支撑扩展在参数扩展之前发生。 "{${start}..${end}}"不是有效的大括号扩展表达式,因此未展开。请改用seq

答案 1 :(得分:2)

您的for循环应该是这样的:

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