次のコードを使用して最初に配列を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文にあると思います。関数を使用する場合は、角かっこが必要ないようです。これを見てください:
私はあなたがこれをしたいと思います:
if array_contains2 $team1 "Alchemist" "Axe"; then
echo "This is true"
fi