最初のインデックスと最後のインデックスの間のすべての要素を取得するためにインデックス配列を分割する方法は?

最初のインデックスと最後のインデックスの間のすべての要素を取得するためにインデックス配列を分割する方法は?

tokens含まれる値がありますtokens=( first one two three last )( one two three )配列にいくつの数値があるかわからない場合は、どのように値を取得できますか?firstlast(排他)の間のすべての項目にアクセスしたいです。

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]

おすすめ記事