Bash Case $ Var in più hit
-
20-12-2019 - |
Domanda
shopt -s extglob
CONDITION1="@(*cheese*|*milk*|*cream*)"
CONDITION2="@(*potato*|*rice*|*pasta*)"
myvar1="pasta with cheese"
case ${myvar1} in
${CONDITION1} )
echo DAIRY
;;
${CONDITION2} )
echo CARBS
;;
* )
echo HUNGRY
;;
esac
.
Risultato di questo script è Echo Dairy
Ho bisogno di cambiare il codice sopra quindi echee: DIARIO Carboidrati
è possibile?
Soluzione
Utilizzare ;;&
anziché ;;
se si desidera questo comportamento.
Detto questo, il comportamento autunnale significherà che si ottiene HUNGRY
incondizionatamente.Suggerirei di impostare una bandiera sulle partite e controllando per esso prima di emettere generacolotetagcode.
Allora:
myvar1="pasta with cheese"; matched=0
case $myvar1 in
*cheese*|*milk*|*cream*)
echo DAIRY; matched=1 ;;&
*potato*|*rick*|*pasta*)
echo CARBS; matched=1 ;;&
esac
(( matched )) || echo HUNGRY
.
Detto questo, sarebbe abbastanza facile rendere questo codice conforme a POSIX SH dividendo in più istruzioni case (e, ancora, non utilizzando ExtGlobs):
myvar1="pasta with cheese"; unset matched
case $myvar1 in *cheese*|*milk*|*cream*) echo DAIRY; matched=1 ;; esac
case $myvar1 in *potato*|*rick*|*pasta*) echo CARBS; matched=1 ;; esac
[ "$matched" ] || echo HUNGRY
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow