답변:
음수 색인 ${myarray[-1]}
을 사용 하여 마지막 요소를 얻을 수 있습니다 . 두 번째 마지막에 대해서도 같은 작업을 수행 할 수 있습니다. 배쉬에서 :
인덱스 배열의 요소를 참조하는 데 사용 된 아래 첨자가 0보다 작은 숫자로 평가되면 배열의 최대 인덱스보다 큰 것으로 해석되므로 배열의 끝에서 음의 인덱스가 다시 계산됩니다. 인덱스 -1은 마지막 요소를 나타냅니다.
할당에도 동일하게 적용됩니다. "표현"이라고 할 때 실제로는 표현을 의미합니다. 배열의 길이를 ${#myarray[@]}
명시 적으로 사용하여 계산하는 것을 포함하여 인덱스를 계산하기 위해 모든 산술 표현식을 작성할 수 있습니다 .
ksh
및 zsh
뿐만 아니라.
zsh
하지만, 기본 배열은에 의해 1 인덱스 달리 bash
하고 ksh
그들이 어디에 0 인덱스.
index에서 마지막 요소를 읽을 수 있습니다 -1
.
$ a=(a b c d e f)
$ echo ${a[-1]}
f
bash 버전 4.1-alpha로 시작 하는 음의 인덱스를 사용하여 끝에서 숫자 인덱스 배열에 액세스하는 지원 .
${#a[@]}
마지막 요소를 얻으려면 배열 길이 를 가져 와서 빼야합니다.
$ echo ${a[${#a[@]}-1]}
f
bash는 배열 첨자를 산술 표현식으로 취급하므로 $((...))
산술 평가를 강제하기 위해 와 같은 추가 표기법이 필요하지 않습니다 .
modern
버전으로 자격 을 갖추면 더 나은 답변을 얻을 수 있습니다 .
bash
음수 인덱스로 배열 할당, 참조, 설정 해제 는 bash 4.3 에서만 추가되었습니다 . 의 이전 버전 bash
에서는 index 식을 사용할 수 있습니다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]
오프셋 부정 사용하면 분리 할 필요 :
와 -
과 혼동을 피하기 위해 :-
확장.
"${a[@]: -1}"
하고 그것은 (이외의 작동 bash
및 zsh
도) ksh
.
zsh
또는 의 문서를 검사 bash
하지는 않았지만 세 가지 껍질 모두에서 테스트했습니다.)
bash (bash 3.0 이상부터)에서 가장 오래된 대안은 다음과 같습니다.
$ a=(aa bb cc dd ee)
$ echo "${a[@]:(-1)} ${a[@]: -1} ${a[@]:(~0)} ${a[@]:~0}"
ee ee ee ee
(기본값 사용) 의 확장으로 :
마이너스 가 해석되는 것을 피하기 위해 공간이 필요합니다 .-
"${var:-abc}"
는 ~
연산 인 비트 부정 (1의 보수와 동등 또는 모든 비트를 반전 ). 남자 배쉬에서 :
산술 평가
! ~ logical and bitwise negation
bash-4.2 이상부터 :
$ echo "${a[-1]} ${a[(~0)]}"
ee ee
bash 5.0 이상부터 :
$ echo "${a[~0]}"
ee
모든 배쉬 버전 (이전 배쉬) :
$ echo "${a[ ${#a[@]}-1 ]}" # spaces added **only** for readability
ee
위치 인수의 경우 (bash 2.01부터) :
$ set aa bb cc dd ee
$ echo "${@:(-1)} ${@:~0} ${@: -1} ${@:$#} ${!#}"
ee ee ee ee
모든 쉘을위한 휴대용 솔루션은 eval을 사용하는 것입니다.
eval printf '"%s\n"' \"\${$#}\"
$@
되나요? bash: ${@[@]:(-1)}: bad substitution
man bash
참조가 있습니다 (@ 제목에서 확장 된 답변 확인). @TomHale
@
것입니다 하지 배열 (물론,하지 완벽하게 배열 bash는) 그것은 인덱스 (동의하지 않는 []
개별 인수에 대한) 첨자. 사용해야 ${@:(-1)}
합니다. @
제목 에서 확장 된 항목을 확인하십시오 . @TomHale
$@
정확히 배열이 아닙니다 (아래 첨자 사용 불가). 이에 대해서는 쉘 스크립트에 전달 된 마지막 인수 얻기를 참조하십시오 .