Bashで配列の要素を見つける

Bashで配列の要素を見つける

次のコードを使用して最初に配列を2つの配列に分割し、次に両方の分割配列で「Alchemist」と「Axe」という2つの要素があるかどうかを検索します。

tempifs=$IFS
    IFS=,
    match=($i)
    IFS=$tempifs
    team1=( "${match[@]:0:5}" )
    team2=( "${match[@]:5:5}" )
        if [ array_contains2 $team1 "Alchemist" "Axe" ]
    then
    echo "team1 contains"
        fi
    if [ array_contains2 $team2 "Alchemist" "Axe" ]
    then
    echo "team2 contains"
        fi  

array_contains2 () { 
    local array="$1[@]"
    local seeking=$2
    local seeking1=$3
    local in=0
    for element in "${array[@]}"; do
        if [[ $element == $seeking && $element == $seeking1]]
    then
            in=1
            break
        fi
    done
    return $in
}

ただし、次のエラーが発生します。

/home/ashwin/bin/re: line 18: [: Alchemist: binary operator expected
/home/ashwin/bin/re: line 14: [: too many arguments

14行と18行はそれぞれif [ array_contains2 $team1 "Alchemist" "Axe" ]とですif [ array_contains2 $team2 "Alchemist" "Axe" ]

IFSエラーが原因です。そうでない場合、エラーの原因は何ですか?

ベストアンサー1

問題はif文にあると思います。関数を使用する場合は、角かっこが必要ないようです。これを見てください:

https://stackoverflow.com/questions/8117822/in-bash-can-you-use-a-function-call-as-a-condition-in-an-if-statement

私はあなたがこれをしたいと思います:

if array_contains2 $team1 "Alchemist" "Axe"; then
    echo "This is true"
fi

おすすめ記事