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

  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013