SORU
10 EYLÜL 2010, Cuma


Eğer bir dizi değeri içeriyorsa, kontrol

Bash, eğer bir dizi belirli bir değeri içeriyorsa test etmek için en kolay yolu nedir?

EDİTbazı testlerden sonra cevapları ve açıklamaları yardımıyla, bu nasıl geldim:

function contains() {
    local n=$#
    local value=${!n}
    for ((i=1;i < $#;i  )) {
        if [ "${!i}" == "${value}" ]; then
            echo "y"
            return 0
        fi
    }
    echo "n"
    return 1
}

A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
    echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
    echo "contains three"
fi

Eğer en iyi çözüm olup olmadığından emin değilim, ama iş gibi görünüyor.

CEVAP
20 Aralık 2011, Salı


Aşağıda bunu başarmak için küçük bir fonksiyon. Arama dizesi ilk bağımsız değişken ve geri kalan dizi elemanları

containsElement () {
  local e
  for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
  return 1
}

Bu fonksiyon bir test gibi görünebilir:

$ array=("something to search for" "a string" "test2000")
$ containsElement "a string" "${array[@]}"
$ echo $?
0
$ containsElement "blaha" "${array[@]}"
$ echo $?
1

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007
  • njhaley

    njhaley

    24 NİSAN 2006