Bash에 정의된 배열의 길이를 계산하는 방법은 무엇입니까?

Bash에 정의된 배열의 길이를 계산하는 방법은 무엇입니까?

저는 Bash를 처음 접했고 제 질문에 답할 수 있는 좋은 튜토리얼을 찾을 수 없습니다.

array=( item1 item2 item3 )
for name in ${array[@]}; do
    echo current/total
    ... some other codes
done

예상 출력으로 합계 값을 current계산 하고 싶습니다 .total

1/3
2/3
3/3

어떤 팁이라도 주셔서 감사합니다.

답변1

예를 들어 다음을 사용하여 배열 인덱스에 액세스 ${!array[@]}하고 를 사용하여 배열 길이에 액세스 할 수 있습니다.${#array[@]}

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done

bash 배열은 다음과 같습니다.제로 인덱스, 실제로 다음을 얻게 됩니다.

0/3
1/3
2/3

카운트를 1부터 시작하려면 $index로 바꾸면 됩니다 $((index+1)). 네가 원한다면가치사용할 수 있는 인덱스, "${array[index]}"

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done

주다

1/3 = item1
2/3 = item2
3/3 = item3

답변2

인덱스가 실제로 인덱스라고 생각하면 0 인덱싱은 완벽하게 유효합니다.오프셋배열의 기본 주소부터 시작합니다. 실제로 방언마다 다르지만 이것이 표준입니다. 이전 Jovial 언어에서는 [0]배열의 최대 크기가 실제로 포함되었습니다. 그래서 로 시작합니다 [1].

0일부 기본 구현의 경우 선택적으로 또는 1첫 번째 인덱스로 사용할 수 있습니다 . 그리고 적어도 하나의 Basic을 사용하면 [n]에서 까지의 인덱스 배열을 지정할 수 있습니다 [m]. 여기서 nsum은 . 보다 작거나 같으면 m임의의 정수 값, 음수라도 될 수 있습니다 . 인덱스가 해당하는 것처럼 입력 값에서 해당 값을 뺍니다 .nmn[index]index-n = 0n

그러나 자신의 코드에서 동일한 작업과 그 이상을 수행할 수 있습니다. 다음과 같이 배열의 순서를 반대로 바꿀 수도 있습니다.

dim array(0, abs(m-n)); 
step=sign(m-n); 
if n > m then 
    base=m 
else 
    base=n; 
fi

이 코드 예제는 실제로 언어의 일부일 뿐입니다. 나는 그것을 더 읽기 쉽게 만들고 싶습니다. 단계 변수는 양수인지 음수인지에 따라 이동의 겉보기 방향을 제어하는 ​​데 사용되며 배열에 들어가거나 나갈 때 실제로는 항상 양수인 유효 인덱스를 계산하는 데 사용됩니다 [0].

관련 정보