Estou procurando uma construção bash
, para decidir se uma variável $WORD
é uma das palavras definidas. Eu preciso de algo assim:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
bash tem essa construção? Caso contrário, qual seria o mais próximo?
bash
shell-script
Martin Vegter
fonte
fonte
shopt -s nocasematch
pode ajudar se você desejar que a pesquisa não diferencie maiúsculas de minúsculas.[[
e]]
-[
e]
não é suficiente.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
fonte
E se:
Então:
fonte
fonte
$WORD
estiver vazio, corresponderá seWORD=ca
ouWORD=og
ou semelhante e suponho que você quis dizerecho ${set[@]}
.Você pode definir uma função bash para isso:
Então use simplesmente assim:
fonte
Eu estava procurando por uma solução 'de uma linha' para validar meu argumento de script e usei a resposta de Joseph R. acima para criar:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
fonte
Isso funcionou para mim:
fonte
Você pode colocar a lista de palavras em um arquivo, caso mude a lista com frequência ou queira que ela seja compartilhada por vários scripts. E pode ser necessário colocar as palavras em um arquivo se a lista demorar muito para ser gerenciada em um script. Então você pode dizer
fonte
Se as palavras são uma lista em que os valores são separados por uma nova linha, você pode:
fonte
Você pode usar o fgrep para especificar todas as palavras permitidas:
O
-w
sinalizador corresponde apenas a palavras completas, o-q
sinalizador faz com que ele funcione silenciosamente (porque tudo o que precisamos é o valor de retorno para a instrução if usar), e cada-e
padrão especifica um padrão a ser permitido.fgrep
é a versão do grep que faz a correspondência normal de cadeias de caracteres em vez da correspondência de regex. Se você tivergrep
, você deve terfgrep
, mas se não, é idêntico ao usogrep
com a-F
bandeira (então você substituifgrep -wq
acima porgrep -Fwq
).fonte