シェルスクリプト:パラメータが多すぎます。

シェルスクリプト:パラメータが多すぎます。
#!/usr/bin/ksh
i=1   
while [ "$i" -lt 121 ]   
do  
    if [ $i -lt 100 ]  
    then  
        if [ $i -lt 10 ]   
        then   
            i=00$i   
        else   
            i=0$1    
        fi   
    fi   
    echo "fla${i}"  
    i=' expr $i+1 '  
done  
exit 0

このスクリプトで「引数が多すぎます」というエラーが発生するのはなぜですか?

答え1

i=' expr $i+1 '増分せずに "expr $i+1" 値をi割り当てます。i

次のループ反復で実行します[ $i -lt 100 ]i二重引用符で囲まれていないので、実際にはコマンドです[ expr '$i+1' -lt 100 ]。に拡張され[、上記の理由であまりにも多くの引数を提供しました。

i=' expr $i+1 'に置き換えると、i=$(($i + 1))コードが機能します。

編集する:

少なくともBashは、8進数として解釈される数値008に問題があるようです。 008以降にエラーが発生した場合は00$i0$i$iの変数(またはなど)を割り当てる必要があります。echo "fla00$i"

この場合、i> = 100の場合は何かをする必要があります。

これが私がやろうとしていることです。

i=1
while [ $i -lt 121 ]; do
    if [ $i -ge 100 ]; then
        echo fla$i
    elif [ $i -ge 10 ]; then
        echo fla0$i
    else
        echo fla00$i
    fi
    i=$(($i + 1))
done

答え2

スクリプト全体の目的は、次のことです。seq -f 'fla%03.0f' 1 128

シェルプログラミング情報:

i=0$1おそらくそうすべきでしょうi="0$i"

' expr $i+1 'しなければならない$( expr "$i" + 1 )

必須スペースを書き留めますexpr。これはうまくいきません$( expr "$i"+1 )

関連情報