나는 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[@]}
.
#!/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
답변
인덱스가 실제로 배열의 기본 주소에서 오프셋 된 것으로 생각하면 인덱스 0은 완벽하게 유효합니다 . 그것은 방언에 따라 다르지만 실제로는 표준입니다. 이전 Jovial 언어에서는 [0]
실제로 최대 배열 크기가 포함되었습니다. 그래서 시작했습니다 [1]
.
일부 기본 구현에서는 임의로 0
또는 1
첫 번째 인덱스 를 갖도록 선택할 수 있습니다 . 적어도 하나의 Basic을 사용하면 fron [n]
을 색인화 할 배열을 지정할 수 있습니다 [m]
. where n
및 보다 작거나 같은 m
정수 값 (음수)도 가질 수 있습니다 . index에 해당하는 것처럼 입력 한 값에서 값 이 빼집니다 .n
m
n
[index]
index-n = 0
n
그러나 자신의 코드에서 똑같은 일을 더 많이 할 수 있습니다. 이런 식으로 배열의 순서를 바꿀 수도 있습니다.
dim array(0, abs(m-n));
step=sign(m-n);
if n > m then
base=m
else
base=n;
fi
이 코드 예제는 실제로는 한 언어의 일부일뿐입니다. 나는 그것이 더 읽기 쉽기를 바랐다. step 변수는 양수 또는 음수로 이동하는 겉보기 방향을 제어하는 데 사용되며, 배열에 들어 오거나 나올 때 유효 인덱스를 계산하는 데 사용되며 실제로는 항상 양수입니다 [0]
.