
이것은 피보나치 수열을 인쇄하는 함수를 작성하기 위한 코드입니다.
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]를 입력해야 하는 경우