Encontrando elementos em um array no bash

0

Estou usando o seguinte código para primeiro dividir uma matriz em 2 e, em seguida, pesquisar se 2 elementos "Alchemist" e "Axe" estão presentes em cada uma das duas matrizes divididas.

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
}

Mas estou recebendo o seguinte erro -

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

As linhas 14 e 18 são if [ array_contains2 $team1 "Alchemist" "Axe" ] e if [ array_contains2 $team2 "Alchemist" "Axe" ] , respectivamente.

É o erro por causa do IFS. Se não, qual é a causa do erro?

    
por Ashwin 19.04.2014 / 09:26

2 respostas

3

Eu acredito que o problema tem a ver com suas declarações if. Parece que se você estiver usando uma função, não precisará dos colchetes. Por favor veja isto:

link

Eu acredito que você vai querer fazer:

if array_contains2 $team1 "Alchemist" "Axe"; then
    echo "This is true"
fi
    
por 19.04.2014 / 09:55
1

Você já está usando uma função, por que você se limitaria a bash arrays em vez de usar o shell $@ array?

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
    
por 19.04.2014 / 11:28

Tags