我使用以下代码首先将一个数组拆分为 2 个数组,然后搜索两个拆分数组中是否存在 2 个元素“Alchemist”和“Axe”。
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
答案2
您已经在使用函数了,为什么要限制自己使用 bash 数组而不是使用 shell$@
数组?
bash_array=(one two three)
set -- $bash_array
printf %s\\n "$@"
#output
one
two
three
IFS=/ ; echo "$*" ; echo "$@"
#output
/one/two/three
one two three
unset IFS ; in=$* ;
[ -n "${in#"${in%$2*}"}" ] && echo "$2 is in $@" || echo nope
#output
two is in one two three