1
votes

moyen plus court de vérifier une extension .pgn non sensible à la casse dans bash

J'écris un programme bash qui recherche des fichiers .pgn (notation de jeu portable) dans un dossier. Mais dans mon programme, les extensions .pgn ne sont pas sensibles à la casse. Cela signifie qu'ils peuvent être soit minuscules, soit majuscules, soit une combinaison des deux. (.Pgn, .PGN, .pGn, .etc).
Donc, pour vérifier l'extension, je fais ceci:

extension="${file: -4}"
extension="${extension,,}"
if [ "${extension}" == ".pgn" ]

Je me demande s'il existe un moyen de le faire, de manière plus courte. Par plus court, je veux dire tout faire dans l'instruction if .
Merci d'avance de m'aider.


0 commentaires

3 Réponses :


0
votes

Avec bash et une regex:

if [[ "$file" =~ \.[Pp][Gg][Nn]$ ]]


0 commentaires

1
votes

Utilisez l'option nocasematch avec une simple correspondance de modèle. Il n'est pas nécessaire d'extraire l'extension.

shopt -s nocasematch

if [[ $file = *.pgn ]]; then
    echo "PGN file"
fi


0 commentaires

0
votes

Vous utilisez déjà la bonne syntaxe, mais peut être la mauvaise version de bash

si bash --version vaut 3. * la substitution extension = "$ {extension, ,} " est NON VALIDE

extension =" $ {extension ,} " fonctionne avec bash> = 4 p>

file="a.PGn" ; 
shopt -s nocasematch;  
if [[ $file = *.pgn ]]; then
    echo "PGN file"; 
fi; 
shopt -u nocasematch;  
if [[ $file = *.pgn ]]; then
   echo "PGN file";
fi;

alternative 1 : utilisez tr pour diminuer votre extension

if [[ "$file" =~ \.[Pp][Gg][Nn]$ ]]

alternative 2 : utilisez find avec -iname

for F in $( find . -iname '*.pgn' -print );
do 
    echo $F;
done

un exemple de boucle

find . -iname '*.pgn'  

alternative 3 : utilisez une expression régulière pour faire correspondre l'extension (grâce à @Cyrus)

extension=$( echo "${extension}"| tr "[:upper:]" "[:lower:]" ) 
alternative 4

: changez le comportement de bash en paramétrant l'option nocasematch (merci à @chepner)

shopt -s code> pour activer shopt -u pour désactiver

un exemple

for F in Aa.png  Ab.PnG  ; 
do 
    extension="${F: -4}" ; 
    extension="${extension,,}" ; 
    echo $F : $extension ; 
done


1 commentaires

Merci pour cette explication approfondie. Je vous en suis reconnaissant