Je cherche une construction dans bash
, pour décider si une variable $WORD
est un mot défini. J'ai besoin de quelque chose comme ça:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
bash a-t-il une telle construction? Si non, quel serait le plus proche?
bash
shell-script
Martin Vegter
la source
la source
shopt -s nocasematch
pourrait aider si vous souhaitez que la recherche soit insensible à la casse.[[
et]]
-[
et]
ne suffisent pas.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
la source
Que diriez-vous:
Ensuite:
la source
la source
$WORD
est vide, il correspondra siWORD=ca
ouWORD=og
ou similaire et je suppose que vous vouliez direecho ${set[@]}
.Vous pouvez définir une fonction bash pour cela:
Ensuite, utilisez simplement comme ceci:
la source
Je cherchais une solution «une ligne» pour valider mon argument de script et utilisais la réponse de Joseph R. ci-dessus pour trouver:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
la source
Cela a fonctionné pour moi:
la source
Vous voudrez peut-être mettre la liste de mots dans un fichier si vous la modifiez souvent ou si vous souhaitez que plusieurs scripts la partagent. Et vous devrez peut-être mettre les mots dans un fichier si la liste est trop longue à gérer dans un script. Alors tu peux dire
la source
Si les mots sont une liste où les valeurs sont séparées par une nouvelle ligne, vous pouvez faire:
la source
Vous pouvez utiliser fgrep pour spécifier tous les mots autorisés:
Le
-w
drapeau ne correspond qu'à des mots entiers, il le-q
fait fonctionner de manière silencieuse (car tout ce dont nous avons besoin est la valeur de retour de l'instruction if à utiliser) et chaque-e
modèle spécifie un modèle à autoriser.fgrep
est la version de grep qui effectue la correspondance normale des chaînes au lieu de la correspondance régulière. Si vous avezgrep
, vous devriez avoirfgrep
, mais sinon, c'est identique à utilisergrep
avec le-F
drapeau (afin que vous remplaciez simplementfgrep -wq
ci-dessus avecgrep -Fwq
).la source