216 votes

Comment faire correspondre une chaîne de caractères avec une regex en Bash ?

J'essaie d'écrire un bash script qui contient une fonction de sorte que, lorsqu'on lui donne un .tar , .tar.bz2 , .tar.gz etc., il utilise tar avec les options appropriées pour décompresser le fichier.

J'utilise des instructions if elif then qui testent le nom de fichier pour voir ce qui le termine et je n'arrive pas à le faire correspondre en utilisant des métacaractères regex.

Pour éviter de réécrire constamment le script, j'utilise 'test' à la ligne de commande, j'ai pensé que l'instruction ci-dessous devrait fonctionner, j'ai essayé toutes les combinaisons possibles de parenthèses, de guillemets et de métacaractères et cela échoue toujours.

test sed-4.2.2.tar.bz2 = tar\.bz2$; echo $?
(this returns 1, false)

Je suis sûr que le problème est simple et j'ai cherché partout, mais je n'arrive pas à comprendre comment faire. Quelqu'un sait-il comment je peux le faire ?

2voto

if [[ $STR == *pattern* ]]
then
    echo "It is the string!"
else
    echo "It's not him!"
fi

Ça marche pour moi ! GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

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