En utilisant GNU bash (version 4.0.35 (1) -release (x86_64-suse-linux-gnu), je voudrais annuler un test avec des expressions régulières. Par exemple, je voudrais ajouter conditionnellement un chemin à la variable PATH, si le chemin n'est pas déjà là, comme dans:
TEMP=/mnt/silo/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
export PATH
Je suis sûr qu'il existe un million de façons de le faire, mais ce que j'aimerais savoir, c'est si le conditionnel peut être annulé d'une manière ou d'une autre, comme dans (l'erreur):
TEMP=/mnt/silo/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
export PATH
regex
bash
conditional
negate
David Rogers
la source
la source
Vous pouvez également mettre le point d'exclamation entre les crochets:
mais vous devez ancrer votre modèle pour réduire les faux positifs:
qui recherche une correspondance au début ou à la fin avec un signe deux-points avant ou après (ou les deux). Je recommande d'utiliser des noms de variables en minuscules ou en casse mixte comme habitude pour réduire le risque de collision de noms avec les variables shell.
la source
$
donc il n'y a aucune raison de les mettre en majuscules pour les faire ressortir.if [[ ! $foo =~ bar ]]
plus sûr queif ! [[ $foo =~ bar ]]
, car il est plus facile d'introduire plus de conditions dans leif
le moyen le plus sûr est de mettre le! pour la négation regex dans le
[[ ]]
genre:sinon, il pourrait échouer sur certains systèmes.
la source
Oui, vous pouvez annuler le test comme SiegeX l' a déjà souligné.
Cependant, vous ne devez pas utiliser d'expressions régulières pour cela - cela peut échouer si votre chemin contient des caractères spéciaux. Essayez plutôt ceci:
(La source)
la source
J'aime simplifier le code sans utiliser d'opérateurs conditionnels dans de tels cas:
la source