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?

È stato utile?

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
scroll top