Esta é uma solução somente Bash (> = versão 3) que usa expressões regulares:
if [[ "$WORD" =~ ^(cat|dog|horse)$ ]]; then
echo "$WORD is in the list"
else
echo "$WORD is not in the list"
fi
Se a sua lista de palavras for longa, você pode armazená-la em um arquivo (uma palavra por linha) e fazer isso:
if [[ "$WORD" =~ $(echo ^\($(paste -sd'|' /your/file)\)$) ]]; then
echo "$WORD is in the list"
else
echo "$WORD is not in the list"
fi
Uma ressalva com a abordagem de arquivos:
-
Ele será quebrado se o arquivo tiver espaço em branco. Isso pode ser remediado por algo como:
sed 's/[[:blank:]]//g' /your/file | paste -sd '|' /dev/stdin
Obrigado ao @terdon por me lembrar de ancorar corretamente o padrão com ^
e $
.