
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番目の要素のインデックスを決定する必要があります(ここでは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