Bash를 사용하여 배열의 마지막 요소를 읽는 방법이 있습니까?

Bash를 사용하여 배열의 마지막 요소를 읽는 방법이 있습니까?

예를 들어, 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을 빼는 것입니다.

관련 정보