2 votes

Erreur de syntaxe de l'instruction case de bash lors de l'utilisation de la recherche de motifs étendue

Ce code fonctionne sous GNU bash, version 5.0.7(1)-release (x86_64-redhat-linux-gnu) :

var="r=x"
case "$var" in
        r=?(x|xy|xyz))
                echo "suchess"
                ;;
esac

génère cette erreur :

bash: test.sh: line 3: syntax error near unexpected token `('
bash: test.sh: line 3: `        r=?(x|xy|xyz))'

Je n'arrive pas à comprendre pourquoi... code testé trouvé aquí et cela fonctionne.

3voto

Rebecca Points 80

Argh. C'est embarrassant. J'ai trouvé la réponse presque aussitôt que j'ai posté ce message. La réponse se trouve dans le lien de ma question. J'avais besoin d'ajouter :

shopt -s extglob

Au début de script.

J'espère que cela aidera quelqu'un d'autre à l'avenir.

La réponse se trouve ici : Comment utiliser des modèles dans un exposé de cas ?

2voto

Inian Points 36223

En outre, il est possible de ne pas utiliser ou définir le paramètre extglob explicitement et faire cette correspondance avec un case déclaration. Si vous utilisez bash , le test L'opérateur fournit cette correspondance lorsqu'il est utilisé avec ==

var="r=x"
if [[ $var == r=?(x|xy|xyz) ]]; then
    printf '%s\n' "success"
fi

Veillez à ne pas citer le motif global dans la partie droite de l'écran. == de l'opérateur. Il faut soit l'utiliser ci-dessus, soit faire une affectation de variable pour stocker le glob et faire une comparaison sans guillemets.

glob="r=?(x|xy|xyz)"
if [[ $var == $glob ]]; then

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X