在bash中查找数组中的元素

在bash中查找数组中的元素

我使用以下代码首先将一个数组拆分为 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 语句有关。看起来如果您使用的是函数,则不需要方括号。请看这个:

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

答案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

相关内容