Estoy buscando una construcción en bash
, para decidir si una variable $WORD
es 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 nocasematch
podrí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
$WORD
está vacío, que coincidirá siWORD=ca
oWORD=og
o 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
-w
bandera solo coincide con palabras completas, la-q
bandera hace que opere en silencio (porque todo lo que necesitamos es el valor de retorno de la instrucción if para usar), y cada-e
patrón especifica un patrón para permitir.fgrep
es 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 usogrep
con la-F
bandera (por lo que simplemente reemplazaría elfgrep -wq
anterior congrep -Fwq
).fuente