Estoy buscando una construcción en bash, para decidir si una variable $WORDes una de las palabras definidas. Necesito algo como esto:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
¿bash tiene tal construcción? Si no, ¿cuál sería el más cercano?
bash
shell-script
Martin Vegter
fuente
fuente

shopt -s nocasematchpodría ayudar si desea que la búsqueda no distinga entre mayúsculas y minúsculas.[[y]],[y]no son suficientes.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }fuente
Qué tal si:
Entonces:
fuente
fuente
$WORDestá vacío, que coincidirá siWORD=caoWORD=ogo similar y supongo que quería decirecho ${set[@]}.Podría definir una función bash para esto:
Luego use simplemente así:
fuente
Estaba buscando una solución de 'una línea' para validar mi argumento de script, y utilicé la respuesta de Joseph R. anterior para llegar a:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }fuente
Esto funcionó para mí:
fuente
Es posible que desee colocar la lista de palabras en un archivo, en caso de que cambie la lista con frecuencia, o si desea que varias secuencias de comandos la compartan. Y es posible que deba poner las palabras en un archivo si la lista se vuelve demasiado larga para administrarla en un script. Entonces puedes decir
fuente
Si las palabras son una lista donde los valores están separados por una nueva línea, puede hacer:
fuente
Puede usar fgrep para especificar todas las palabras permitidas:
La
-wbandera solo coincide con palabras completas, la-qbandera hace que opere en silencio (porque todo lo que necesitamos es el valor de retorno de la instrucción if para usar), y cada-epatrón especifica un patrón para permitir.fgrepes la versión de grep que hace una coincidencia normal de cadenas en lugar de una coincidencia de expresiones regulares. Si es asígrep, debería serlofgrep, pero si no, es idéntico al usogrepcon la-Fbandera (por lo que simplemente reemplazaría elfgrep -wqanterior congrep -Fwq).fuente