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

저는 bash를 처음 사용하여 제 질문에 답할 수있는 좋은 자습서를 찾을 수 없습니다.

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

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

1/3 2/3 3/3 

모든 종류의 도움말에 감사드립니다.

댓글

  • 큰 따옴표로 묶인 ${array[@]} 그렇지 않으면 단어 분할이 수행되고 array=("item 1" "item 2" "item 3")와 같은 입력에서 원하지 않는 결과가 나타납니다.

Answer

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

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

bash 배열은 인덱싱이 0이기 때문에 실제로 다음을 얻습니다.

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 

댓글

  • 1, 2,3을 받고 싶다면 이 작업을 수행합니다. echo ($index+1)/${#array[@]}?
  • btw, 이렇게하면 항목 1을 ' 얻을 수없는 것 같습니다. 루프의 item2, item3. 나는 여전히 item1, item2, item3 물건을 다루는 다른 코드가 있습니다. 감사합니다.
  • 수정 된 게시물보기

답변

색인 0은 완벽하게 유효합니다. 인덱스가 실제로 배열의 기본 주소에서 오프셋 이라고 생각하는 경우. 방언마다 다르지만 실제로는 이것이 표준입니다. 이전 Jovial 언어의 경우 [0] 실제로 배열의 최대 크기가 포함되어 있으므로

.

일부 기본 구현의 경우 0 또는 1를 첫 번째 색인으로 지정합니다. 그리고 하나 이상의 Basic을 사용하면 fron [n]에서 [m]까지 색인화 할 배열을 지정할 수 있습니다. 여기서 nmn보다 작은 경우 음수를 포함한 모든 정수 값을 가질 수 있습니다. m 이상입니다. 입력 한 [index]에서 n 값이 차감됩니다. 색인이 n에 해당하는 경우 index-n = 0와 같습니다.

하지만 자신의 코드에서 동일한 작업을 수행 할 수 있습니다. . 순서를 반대로 할 수도 있습니다. 다음과 같이 배열의 경우 :

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

이 코드 예제는 실제로 한 언어의 일부일뿐입니다. 더 읽기 쉽게 만들고 싶었습니다. 단계 변수는 양수 또는 음수로 이동하는 명백한 방향을 제어하는 데 사용되며 배열에 들어가거나 나올 때 유효 인덱스를 계산하는 데 사용됩니다. 실제로는 항상 .

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다