配列にアクセスするこの関数はどのように機能しますか?

配列にアクセスするこの関数はどのように機能しますか?

文字列が配列にあることを確認したいと思います。 Googleで次の機能を見つけました。ただし、この機能の意味を完全に理解することはできません。この関数では、match一致させる文字列が割り当てられます。しかし、配列はどこに保存されていますか?いくつかの出力を追加しましたが、変数はe常に空です。どういう意味か探してみましたshift。変数を左$2に移動します$1。しかし、それは役に立たなくなりました$1。この機能がどのように機能するかを知っている人はいますか?とても感謝しています。

containsElement () {
      local e match="$1"
      echo $match
      echo $e
      shift
      echo $e
      echo $match
      for e; do [[ "$e" == "$match" ]] && return 0; done
      return 1
    }
array=("something to search for" " for" "a string" "test2000")
containsElement "a string" "${array[@]}"
echo $?

答え1

メンズバッシュから:

~のため名前[[存在する[言葉...]]; ]するリスト;完了
...
「あれば」言葉「省略すると for コマンドが実行されます。 リスト 各位置引数セットごとに1回

実際には同じことを行います。

for e in "$@"; do

コマンドの後、shiftループ反復の位置引数に配列要素のみが残ります。for

関連情報