예를 들어, 5개의 요소로 구성된 배열이 있는 경우:
[a][b][c][d][e]
echo를 사용하면 ${myarray[4]}
내용을 확인할 수 있습니다.
하지만 주어진 배열의 요소 수를 모른다면 어떻게 될까요? 길이를 알 수 없는 배열의 마지막 요소를 읽는 방법이 있습니까? 즉, 오른쪽에서 왼쪽으로 읽은 배열의 첫 번째 요소는 무엇입니까?
Bash에서 이 작업을 수행하는 방법을 알고 싶습니다.
답변1
배쉬 4.2부터 시작, 그냥 해도 돼요음수 인덱스 사용 ${myarray[-1]}
마지막 요소를 가져옵니다. 두 번째부터 마지막까지 동일한 작업을 수행할 수 있으며, 치명타에도 마찬가지입니다.
인덱스 배열 요소를 참조하는 데 사용된 아래 첨자가 0보다 작은 숫자로 평가되면 배열의 최대 인덱스보다 큰 1을 기준으로 해석되므로 음수 인덱스는 배열 끝에서 거꾸로 계산됩니다. 1은 요소의 끝을 나타냅니다.
배포에도 동일하게 적용됩니다. "표현식"이라고 말하면 실제로는 표현식을 의미합니다. ${#myarray[@]}
이전 버전처럼 계산하기 위해 배열 길이를 명시적으로 사용하는 표현식을 포함하여 인덱스를 계산하기 위해 산술 표현식을 작성할 수 있습니다.${myarray[${#myarray[@]} - 1]}
답변2
최신 bash(v4.1 이상)
index 에서 마지막 요소를 읽을 수 있습니다 -1
.
$ a=(a b c d e f)
$ echo ${a[-1]}
f
음수 인덱스를 사용하여 끝에서부터 숫자 인덱스 배열에 액세스 지원Bash 버전 4.1-alpha부터 시작.
이전 bash(v4.0 이하)
배열 길이를 구한 ${#a[@]}
다음 1을 빼서 마지막 요소를 구해야 합니다.
$ echo ${a[${#a[@]}-1]}
f
$((...))
Bash는 배열 첨자를 산술 표현식으로 처리하므로 산술 계산을 강제하는 데 추가 기호(예: )가 필요하지 않습니다 .
답변3
bash
배열 할당, 참조, 음수 인덱스가 설정되지 않은 경우에만 해당배쉬 4.3에 추가됨. 이전 버전에서는 bash
인덱스에서 표현식을 사용할 수 있습니다array[${#array[@]-1}]
또 다른 방법은 이전 버전 bash
(bash 3.0 이상)을 사용하는 것입니다.
$ a=('[a]' '[b]' '[c]' '[d]' '[e]')
$ printf %s\\n "${a[@]:(-1)}"
[e]
또는:
$ printf %s\\n "${a[@]: -1}"
[e]
음수 오프셋을 사용할 때는 확장 과의 혼동을 피하기 위해 :
with를 구분 해야 합니다 .-
:-
답변4
다음과 같이 할 수도 있습니다.
$ a=(a b c d e f)
$ echo ${a[$(expr ${#a[@]} - 1)]}
결과:
$ f
당신이하고있는 일은 배열의 모든 요소 수를 얻고 배열 인덱스 0에서 시작하지 않고 모든 요소를 가지고 있기 때문에 -1을 빼는 것입니다.