Pomoc dla prostego skryptu
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Ten skrypt po prostu nie działa, chcę skryptu, który sprawdza, czy slack64 jest obecny na liście (używam tablicy), i po prostu daje mi, tak, jest obecny lub nie. Nie wiem, jak porównać tablicę z jedną zmienną.
array1
działa?Odpowiedzi:
Użyj innego rodzaju tablicy: zamiast tablicy indeksowanej liczbami całkowitymi użyj tablicy asocjacyjnej, więc klucz (indeks) jest tym, czego będziesz szukał.
bash-4.0
lub później jest to wymagane.W powyższym przypadku tak naprawdę nie dbamy o wartości, muszą one być tylko puste. Możesz „odwrócić” indeksowaną tablicę na nową tablicę asocjacyjną, wymieniając klucz i wartość:
Może się to opłacić, jeśli masz często wyszukiwane duże tablice, ponieważ implementacja tablic asocjacyjnych będzie działać lepiej niż pętle przeszukiwania tablic. Nie będzie pasował do każdego przypadku użycia, ponieważ nie może obsługiwać duplikatów (chociaż można użyć wartości jako licznika, zamiast tylko 1 jak powyżej) i nie może obsłużyć pustego indeksu.
Przełamując powyższą złożoną linię, aby wyjaśnić „inwersję”:
źródło
Najprostszym sposobem jest iteracja w pętli:
źródło
[[ a == aaa ]]
jest fałszywe, ale dopasowanie aaa nie?[ ]
: klasa postaci (globs)[[ ]]
dla tego, co powiedziałeś. Testowałeś?Z
zsh
:źródło
Ta funkcja działa z tablicami asocjacyjnymi.
Możemy użyć tej funkcji, aby wykonać jedną z następujących czynności:
- sprawdź, czy tablica ma określony klucz -----------------> inArray „myKey” $ {! myArray [@]} ”
- sprawdź, czy tablica zawiera pewną wartość ---------> inArray „myValue” „$ {myArray [@]}”
źródło
Możesz również użyć do tego grep:
źródło
$a
, i nie zaczynaj-
od zapomnienia--
). Możesz użyć%s\0
zamiast%s\n
i użyćgrep --null
(zakładając, że GNU grep lub zgodny), ponieważ zmienne bash i tak nie mogą zawierać znaku NUL. Trzeba by również specjalnie traktować przypadek pustej tablicy (ponieważ to polecenie printf wypisuje to samo, co w przypadku tablicy z jednym pustym elementem). Pamiętaj też, że nie musisz tutaj uruchamiać podpowłoki.