#!/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 )