#1 Le 10/12/2009, à 20:52
- Hizoka
(resolu) Ignorer la casse dans un case
Bonsoir,
je voulais savoir si dans un case il était possible de faire en sorte que la casse ne soit pas prise en compte.
Exemple :
exemple=OGG
case ${exemple} in
ogg) eco "ogg" ;;
aac) echo "aac" ;;
esac
je sais qu'on peut faire :
exemple=OGG
case ${exemple} in
ogg|OGG) eco "ogg" ;;
aac|AAC) echo "aac" ;;
esac
mais je voulais savoir s'il existé une option permettant de dire à case de ne pas tenir compte de la casse.
merci.
Dernière modification par Hizoka (Le 11/12/2009, à 10:09)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 10/12/2009, à 21:40
- Totor
Re : (resolu) Ignorer la casse dans un case
Pour activer l'option : set - s nocaseglob
Pour la désactiver : set -u nocaseglob
-- Lucid Lynx --
Hors ligne
#3 Le 10/12/2009, à 22:14
- Hizoka
Re : (resolu) Ignorer la casse dans un case
donc d'apres ce que je pige :
exemple=OGG
set - s nocaseglob
case ${exemple} in
ogg) eco "ogg" ;;
aac) echo "aac" ;;
esac
set -u nocaseglob
devrait marché.... pourtant ce n'est pas le cas....
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 10/12/2009, à 23:22
- FRUiT
Re : (resolu) Ignorer la casse dans un case
exemple=$(echo -n $exemple | tr '[:upper:]' '[:lower:]')
ou
case "$(echo -n $exemple | tr '[:upper:]' '[:lower:]')" in
*) ;;
esac
Dernière modification par FRUiT (Le 10/12/2009, à 23:25)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#5 Le 11/12/2009, à 02:36
- sputnick
Re : (resolu) Ignorer la casse dans un case
( shopt -s nocasematch; x=FOO; case $x in foo) echo ok;; *) echo no;; esac )
ok
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#6 Le 11/12/2009, à 09:54
- Totor
Re : (resolu) Ignorer la casse dans un case
Pour activer l'option : set - s nocaseglob
Pour la désactiver : set -u nocaseglob
c'est shopt (et non set) bien évidement !
shopt = shell option
Pour nocaseglob ou nocasematch, tout dépend de la version de bash... (je n'ai pas nocasematch au taf - 3.00.15(1))
Désolé pour l'erreur et merci à sputnick d'avoir rectifié !
Dernière modification par Totor (Le 11/12/2009, à 09:55)
-- Lucid Lynx --
Hors ligne
#7 Le 11/12/2009, à 09:58
- FRUiT
Re : (resolu) Ignorer la casse dans un case
donc d'apres ce que je pige :
exemple=OGG set - s nocaseglob case ${exemple} in ogg) eco "ogg" ;; aac) echo "aac" ;; esac set -u nocaseglob
devrait marché.... pourtant ce n'est pas le cas....
T'es sur que tu es bien en bash ?
Ca ne marche pas avec sh par exemple.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#8 Le 11/12/2009, à 10:09
- Hizoka
Re : (resolu) Ignorer la casse dans un case
exemple=OGG
shopt -s nocaseglob
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocaseglob
fonctionne tres bien
merci !!
FRUIT => ça ne venait pas de moi mais du code
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 30/01/2011, à 21:37
- nordinatueur
Re : (resolu) Ignorer la casse dans un case
#!/bin/bash
exemple=OGG
shopt -s nocaseglob
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocaseglob
Ne fonctionne pas chez moi...
J'ai GNU bash 4.1.5
Vous sauriez pourquoi ?
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#10 Le 30/01/2011, à 22:58
- Hizoka
Re : (resolu) Ignorer la casse dans un case
en effet, ça ne passe plus chez moi non plus...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#11 Le 31/01/2011, à 00:31
- FRUiT
Re : (resolu) Ignorer la casse dans un case
Sinon en bash :
case ${exemple,,} in
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#12 Le 31/01/2011, à 08:33
- pode
Re : (resolu) Ignorer la casse dans un case
Une autre solution est d'utiliser typeset -l, à condition qu'on accepte que la valeur de la variable soit automatiquement modifiée :
man bash
[...]
typeset [-aAfFilrtux] [-p] [name[=value] ...]
[...]
-l When the variable is assigned a value, all upper-case
characters are converted to lower-case. The upper-case
attribute is disabled.
Et donc :
$ cat casse.sh
#!/bin/bash
typeset -l exemple
exemple=OGG
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
$ ./casse.sh
ogg
Hors ligne
#13 Le 31/01/2011, à 08:41
- serged
Re : (resolu) Ignorer la casse dans un case
#!/bin/bash exemple=OGG shopt -s nocaseglob case ${exemple} in ogg) echo "ogg" ;; aac) echo "aac" ;; esac shopt -u nocaseglob
Ne fonctionne pas chez moi...
J'ai GNU bash 4.1.5
Vous sauriez pourquoi ?
Je ne sais pas pourquoi, mais la bonne option est nocasematch !
#!/bin/bash
exemple=OGG
shopt -s nocasematch
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocasematch
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
En ligne
#14 Le 31/01/2011, à 09:49
- Hizoka
Re : (resolu) Ignorer la casse dans un case
ouais mais au final, c'est pas con la soluce de FRUIT
case ${exemple,,} in
un chouille plus simple.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 31/01/2011, à 13:48
- serged
Re : (resolu) Ignorer la casse dans un case
ouais mais au final, c'est pas con la soluce de FRUIT
case ${exemple,,} in
un chouille plus simple.
Par contre une explication sur le pourquoi ça fonctionne ?
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
En ligne
#16 Le 31/01/2011, à 13:56
- Hizoka
Re : (resolu) Ignorer la casse dans un case
exemple=OGG
echo ${exemple,,}
=> ogg
la commande ${var,,} transforme toutes les lettres en minuscule, du coup on est bon par rapport au case.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#17 Le 31/01/2011, à 14:59
- ehmicky
Re : (resolu) Ignorer la casse dans un case
Salut,
nocaseglob est pour le globbing dans l'expansion de nom de fichier (et pour les tests =~), et nocasematch dans les case et tests ==, != et =~ avec [[ ]] (et nocasematch demande Bash3) :
$ bash --version | head -n1
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
$ ls
AAA
$ ls a*
ls: cannot access a*: No such file or directory
$ [[ a == A ]] && echo oh
$ [[ a =~ A ]] && echo oh
$ shopt -s nocaseglob
$ ls a*
AAA
$ [[ a == A ]] && echo oh
$ [[ a =~ A ]] && echo oh
oh
$ shopt -u nocaseglob
$ shopt -s nocasematch
$ ls a*
ls: cannot access a*: No such file or directory
$ [[ a == A ]] && echo oh
oh
$ [[ a =~ A ]] && echo oh
oh
$ shopt -u nocasematch
Dernière modification par ehmicky (Le 31/01/2011, à 15:01)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#18 Le 31/01/2011, à 15:31
- nordinatueur
Re : (resolu) Ignorer la casse dans un case
Et bien au moins j'ai trouvé l'occasion de (re)lire le man de bash.
En relisant un peu mieux, je me rend compte que j'ai confondu les deux paragraphes.
Finalement j'ai trouvé ${parameter,,pattern} et ${parameter^^pattern} qui sont bien plus utiles que ce que je cherchais, et c'est plus simple à utiliser... Mais je ne sais pas pour quelles versions de BASH.
Merci quand même. ( Après un déterrage d'un an ! ) C'est bon à savoir.
Par contre, j'ai toujours le même soucis, ni nocaseglob, ni nocasematch, n'apparait dans $BASH_OPTS
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#19 Le 31/01/2011, à 15:37
- ehmicky
Re : (resolu) Ignorer la casse dans un case
${VAR,,} et les autres sont apparus avec Bash 4.
Par contre $BASHOPTS est sans le _
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#20 Le 31/01/2011, à 15:40
- nordinatueur
Re : (resolu) Ignorer la casse dans un case
${VAR,,} et les autres sont apparus avec Bash 4.
Par contre $BASHOPTS est sans le _
Ça n'apparait pas plus ...
francisco@Francisco:~$ shopt -s nocaseglob
francisco@Francisco:~$ echo $BASHOPTS
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:interactive_comments:progcomp:promptvars:sourcepath
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#21 Le 31/01/2011, à 15:44
- ehmicky
Re : (resolu) Ignorer la casse dans un case
De mon côté, j'ai ça :
$ echo $BASHOPTS
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:globstar:histreedit:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
$ shopt -s nocaseglob
$ echo $BASHOPTS
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:globstar:histreedit:hostcomplete:interactive_comments:nocaseglob:progcomp:promptvars:sourcepath
$ shopt | grep nocaseglob
nocaseglob on
$ bash --version | head -n1
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#22 Le 31/01/2011, à 16:38
- Watael
Re : (resolu) Ignorer la casse dans un case
salut
shopt nocaseglob
nocaseglob off
pas besoin de grep
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#23 Le 31/01/2011, à 16:50
- Totor
Re : (resolu) Ignorer la casse dans un case
et pas besoin du head ...
echo ${BASH_VERSION}
# ou
echo ${BASH_VERSINFO[@]}
si déjà dans un environnement bash..
-- Lucid Lynx --
Hors ligne