#!/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$i
、0$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 )