Szukam konstrukcji w bash
, aby zdecydować, czy zmienna $WORD
jest jednym ze zdefiniowanych słów. Potrzebuję czegoś takiego:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
czy bash ma taką konstrukcję? Jeśli nie, co byłoby najbliższe?
bash
shell-script
Martin Vegter
źródło
źródło
shopt -s nocasematch
może pomóc, jeśli chcesz, aby wyszukiwanie nie uwzględniało wielkości liter.[[
i]]
-[
i]
nie wystarczy.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
źródło
Co powiesz na:
Następnie:
źródło
źródło
$WORD
jest pusta, jeśli będzie on pasowałWORD=ca
lubWORD=og
czy podobne i zakładam, że rozumieecho ${set[@]}
.Możesz dla tego zdefiniować funkcję bash:
Następnie użyj po prostu tak:
źródło
szukałem rozwiązania „jednego wiersza”, aby zweryfikować mój argument skryptu, i użyłem odpowiedzi Josepha R. powyżej, aby wymyślić:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
źródło
To działało dla mnie:
źródło
Możesz umieścić listę słów w pliku, na wypadek częstej zmiany listy lub udostępniania wielu skryptów. I może być konieczne wstawienie słów do pliku, jeśli lista jest zbyt długa, aby zarządzać nią w skrypcie. Więc możesz powiedzieć
źródło
Jeśli słowa są listą, na której wartości są oddzielone znakiem nowej linii, możesz:
źródło
Możesz użyć fgrep, aby określić wszystkie dozwolone słowa:
-w
Flaga pasuje tylko pełne słowa,-q
flag sprawia, że działają cicho (bo wszystko czego potrzebujemy to wartość zwracana przez if używać), a każdy-e
wzór określa wzór, aby umożliwić.fgrep
to wersja grep, która wykonuje normalne dopasowywanie ciągów zamiast dopasowywania wyrażeń regularnych. Jeśli takgrep
, powinieneś to zrobićfgrep
, ale jeśli nie, to identyczne jak używaniegrep
z-F
flagą (więc po prostu zastąpiłbyśfgrep -wq
powyżejgrep -Fwq
).źródło