Bash는 배열 길이와 오프셋을 얻습니다.

Bash는 배열 길이와 오프셋을 얻습니다.

bash 스크립트를 작성 중인데 요소에서 시작하는 배열의 길이를 가져와야 합니다.

배열이 다음과 같다고 가정해 보겠습니다.

array=(1 2 3 4 5)

다음을 사용하여 오프셋 2에 배열을 인쇄할 수 있습니다.

echo ${array[@]:2}
3 4 5

다음을 사용하여 배열의 길이를 인쇄할 수 있습니다.

echo ${#array[@]}
5

다음을 사용하여 오프셋 2에서 배열 길이를 인쇄하려고합니다.

echo ${#array[@]:2}

작동하지 않습니다. 예상 결과는 다음과 같습니다.

3

방법을 찾았지만 이것이 최선의 방법인지 확실하지 않습니다.

echo $(( ${#array[@]} - 2 ))
3

이를 수행하는 가장 좋은 방법이 있습니까?

감사해요!

답변1

${var:2}$var또한 하위 문자열 확장으로 값의 처음 두 문자를 제거 하도록 확장됩니다 . 이를 염두에 두고 ${#array[@]:2}조금 모호해 보입니다. 먼저 배열에서 두 요소를 꺼낸 다음 길이를 가져와야 할까요? 아니면 길이를 먼저 구한 다음 해당 숫자에서 처음 두 문자를 가져와야 합니까?

후자는 틀림없이 어리석은 일이지만, 당신이 했던 것처럼 배열의 전체 길이에서 2를 뺄 수 있기 때문에 첫 번째도 불필요합니다.

어쨌든 ksh도 이를 지원하지 않습니다 ${#array[@]:2}. Bash의 많은 기능은 원래 ksh에서 나왔기 때문에 Bash가 ksh를 지원하지 않는 이유일 수도 있습니다. 반면에 Zsh는 이를 처리하여 ${#array[@]:2}배열의 길이에서 2를 뺀 값(예제에서 예상한 3)을 제공합니다.

관련 정보