피보나치 수열을 인쇄하는 함수를 작성할 때 잘못된 배열 첨자

피보나치 수열을 인쇄하는 함수를 작성할 때 잘못된 배열 첨자

이것은 피보나치 수열을 인쇄하는 함수를 작성하기 위한 코드입니다.

function fib {
        fib_array=( 0 1 )
        count=3

        while [[ $count -le $1 ]]
        do
                fib_new=$(( ${fib_array[-1]} + ${fib_array[-2]} ))
                fib_array+=( $fib_new )
                let count=$count+1
        done

        echo " ${fib_array[*]}"
}

bash를 실행하면 fib 5다음 메시지가 계속 나타납니다.

-bash: fib_array: bad array subscript
-bash: fib_array: bad array subscript
-bash: +  : syntax error: operand expected (error token is " ")

첫 번째 줄에 문제가 있는 것 같은데 fib_new=$(( ${fib_array[-1]} + ${fib_array[-2]} ))수정하는 방법을 모르겠습니다.

누구든지 도와줄 수 있나요?

답변1

사용중인 bash 버전이 array[-1]. 최신 버전의 bash(4.3 이상)를 설치하거나 다음 스크립트를 사용해 볼 수 있습니다.

fib () {
          fib_array=( 0 1 ); size=2
          limit=$1

          while [[ size -lt limit ]]
          do
              fib_arr+=( "$(( ${fib_arr[size-1]} + ${fib_arr[size-2]} ))" )
              size=${#fib_arr[@]}
          done

          echo " ${fib_arr[*]}"
}

fib "${1:-10}"

음수 인덱싱을 피하기 위해 배열의 크기 변수를 사용합니다.

또는 모든 bash 셸에서 작동하는 약간 더 빠른 옵션을 원한다면 다음을 사용하세요.

fib () {
         limit=$1
         set -- 0 1
         printf '%s %s' "$1" "$2"; count=3
         while [ "$count" -le "$limit" ]; do
              t33=$(($1+$2))
              set -- "$2" "$t33"
              printf ' %s' "$t33"
              count=$((count+1))
         done
         echo
       }

fib ${1:-10}

답변2

[-1]이 [count-1]을 입력해야 하는 경우, [-2]가 [count-2]를 입력해야 하는 경우

관련 정보