tokens
포함된 값이 있습니다 tokens=( first one two three last )
. ( one two three )
배열에 몇 개의 숫자가 있는지 모르는 경우 어떻게 값을 얻을 수 있나요? first
와 last
(독점) 사이의 모든 항목 에 액세스하고 싶습니다 .
echo ${tokens[*]:1:3}
줄 것입니다 one two three
. 그러나 배열의 길이를 모르는 경우 first
전후의 모든 요소를 어떻게 얻을 수 있습니까 last
? Python에서 음수 인덱스를 사용하는 것과 비슷한 것을 찾고 있습니다.tokens[1:-1]
답변1
배열이 희소하지 않은 경우 다음을 수행할 수 있습니다.
bash-5.2$ tokens=( {1..10} )
bash-5.2$ printf ' - %s\n' "${tokens[@]:1:${#tokens[@]}-2}"
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
배열이 희소할 가능성이 있는 경우 두 번째 요소의 인덱스를 결정해야 합니다(여기서는 요소가 2개 이상 있다고 가정).
bash-5.2$ tokens=([12]=a [15]=b [23]=c [123]=d)
bash-5.2$ ind=( "${!tokens[@]}" )
bash-5.2$ printf ' - %s\n' "${tokens[@]:ind[1]:${#tokens[@]}-2}"
- b
- c
zsh
(희소 배열이 아닌 일반 배열이 있음) 에는 $tokens[2,-2]
.
답변2
Bash 버전에 따라 다음이 작동합니다.
tokens=( first one two three last )
echo "${tokens[@]:1:${#tokens[@]}-2}"
결과
one two three