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


57

나는 bash를 처음 접했고 내 질문에 대답하는 좋은 자습서를 찾을 수 없습니다.

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

"현재"및 "총"값을 예상 출력으로 계산하려고합니다.

1/3
2/3
3/3

모든 종류의 팁에 감사드립니다


당신이 넣어해야합니다 ${array[@]}따옴표. 그렇지 않으면, 단어 분리가 수행되고와 같은 입력에서 바람직하지 않은 결과가 나타납니다 array=("item 1" "item 2" "item 3").
gardenhead

답변:


100

다음을 사용하여 배열 색인에 액세스하고 다음을 사용하여 배열 ${!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[@]}.
AGamePlayer

btw, 이런 식으로 루프에서 item1, item2, item3을 얻을 수없는 것 같습니다. item1, item2, item3 물건을 다루는 다른 코드가 여전히 있습니다. 감사합니다,
AGamePlayer

수정 된 게시물을 참조하십시오.
steeldriver

1

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

일부 기본 구현에서는 임의로 0또는 1첫 번째 인덱스 를 갖도록 선택할 수 있습니다 . 적어도 하나의 Basic을 사용하면 fron [n]을 색인화 할 배열을 지정할 수 있습니다 [m]. where n및 보다 작거나 같은 m정수 값 (음수)도 가질 수 있습니다 . index에 해당하는 것처럼 입력 한 값에서 값 이 빼집니다 .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

이 코드 예제는 실제로는 한 언어의 일부일뿐입니다. 나는 그것이 더 읽기 쉽기를 바랐다. step 변수는 양수 또는 음수로 이동하는 겉보기 방향을 제어하는 ​​데 사용되며, 배열에 들어 오거나 나올 때 유효 인덱스를 계산하는 데 사용되며 실제로는 항상 양수입니다 [0].

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.