저는 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
모든 종류의 도움말에 감사드립니다.
댓글
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]
까지 색인화 할 배열을 지정할 수 있습니다. 여기서 n
및 m
는 n
보다 작은 경우 음수를 포함한 모든 정수 값을 가질 수 있습니다. 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
이 코드 예제는 실제로 한 언어의 일부일뿐입니다. 더 읽기 쉽게 만들고 싶었습니다. 단계 변수는 양수 또는 음수로 이동하는 명백한 방향을 제어하는 데 사용되며 배열에 들어가거나 나올 때 유효 인덱스를 계산하는 데 사용됩니다. 실제로는 항상 .
${array[@]}
그렇지 않으면 단어 분할이 수행되고array=("item 1" "item 2" "item 3")
와 같은 입력에서 원하지 않는 결과가 나타납니다.