쉘 스크립트: 매개변수가 너무 많습니다.

쉘 스크립트: 매개변수가 너무 많습니다.
#!/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 )

관련 정보