1. ホーム
  2. arrays

[解決済み] 配列のインデックスやキーをチェックする最も簡単な方法とは?

2022-10-01 21:46:31

質問

使用しています。

set -o nounset

  1. のようなインデックス付き配列を持つこと。

    myArray=( "red" "black" "blue" )
    
    

    要素1が設定されているかどうかを確認する最短の方法は何ですか?

    私は以下のように使うことがあります。

    test "${#myArray[@]}" -gt "1" && echo "1 exists" || echo "1 doesn't exist"
    
    

    好ましいものがあれば教えてほしいです。

  2. 連続しないインデックスをどのように扱うか?

    myArray=()
    myArray[12]="red"
    myArray[51]="black"
    myArray[129]="blue"
    
    

    を素早く確認する方法 51 がすでに設定されていることを確認するには?

  3. 連想配列はどのように扱うのですか?

    declare -A myArray
    myArray["key1"]="red"
    myArray["key2"]="black"
    myArray["key3"]="blue"
    
    

    を素早く確認する方法 key2 がすでに使用されていることを確認するには?

どのように解決するのですか?

要素が設定されているかどうかを確認する(インデックス配列と連想配列の両方に適用される)。

[ "${array[key]+abc}" ] && echo "exists"

基本的には ${array[key]+abc}

  • もし array[key] が設定されている場合は abc
  • もし array[key] が設定されていない場合は、何も返しません。

リファレンス
  1. 参照 パラメータ展開 を参照してください。また、Bashのマニュアルにある小さなメモ

コロンが省略された場合、演算子は[em]の存在だけをテストします。 パラメータ ]

  1. この回答は、実はこのSOの質問の回答から流用したものです。 文字列がbashシェルスクリプトで定義されていないかどうかを判断する方法 ?

ラッパー関数です。

exists(){
  if [ "$2" != in ]; then
    echo "Incorrect usage."
    echo "Correct usage: exists {key} in {array}"
    return
  fi   
  eval '[ ${'$3'[$1]+muahaha} ]'  
}

例えば

if ! exists key in array; then echo "No such array element"; fi