#1 Le 26/02/2021, à 12:07
- ar barzh paour
[Résolu] parenthèses et accolades
attention à l'utilisation de () et de {}
#!/bin/bash
if [[ $1 -eq 0 ]]
then (echo -n "OUI 0";exit 63;echo "A")
else (echo -n "NON 0";exit 64;echo "B")
fi
# la suite est toujours exécutée !!!!!
echo "code de sortie du 1er if : $?" [b]# ajouté suite poste #4[/b]
echo " Paramètre reçu : $1 " [b]# ajouté suite poste #2[/b]
if [[ $1 -eq 1 ]]
then { echo -n " c'est nul ";exit 65;echo "C";}
else { echo -n " c'est nul ";exit 66;echo "D";}
fi
# mais cette suite n'est jamais exécutée
echo "jamais exécutée"
# résultat avec 0
bash ./essai.sh 0 ; echo $?
OUI 0 code de sortie du 1er if : 63
Paramètre reçu : 0
c'est nul 66
# ==> exit 63 n'est pris en compte que dans les ( ) ( que dans le shell enfant )
# ==> exit 66 est pris en compte hors de { } ( dans le shell courant )
# résultat avec 1
bash ./essai.sh 1 ; echo $?
NON 0 code de sortie du 1er if : 64
Paramètre reçu : 1
c'est nul 65
# ==> exit 64 n'est pris en compte que dans les ( ) ( que dans le shell enfant )
# ==> exit 65 est pris en compte hors de { } ( dans le shell courant )
# résultat avec 2
bash ./essai.sh 2 ; echo $?
NON 0 Paramètre reçu : 2 c'est nul 66
# ==> exit 64 n'est pris en compte que dans les ( ) ( que dans le shell enfant )
# ==> exit 66 est pris en compte hors de { } ( dans le shell courant )
Dernière modification par ar barzh paour (Le 27/02/2021, à 10:57)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#2 Le 26/02/2021, à 12:25
- Watael
Re : [Résolu] parenthèses et accolades
tu pourrais ajouter un echo $? sous le premier if
...
Dernière modification par Watael (Le 26/02/2021, à 12:25)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 26/02/2021, à 18:44
- ar barzh paour
Re : [Résolu] parenthèses et accolades
c'est fait !
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#4 Le 26/02/2021, à 18:55
- Watael
Re : [Résolu] parenthèses et accolades
heu, $1, ce n'est pas $?.
mon intention était de montrer que le code retour du exit est accessible.
Dernière modification par Watael (Le 26/02/2021, à 21:34)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 26/02/2021, à 21:24
- Sciensous
Re : [Résolu] parenthèses et accolades
Il me semble qu'il manque des espaces avant les accolades de fermeture }
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 26/02/2021, à 21:34
- Watael
Re : [Résolu] parenthèses et accolades
non.
tel quel ça te provoque une erreur ?
Dernière modification par Watael (Le 26/02/2021, à 21:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 27/02/2021, à 10:37
- ar barzh paour
Re : [Résolu] parenthèses et accolades
@Watael j'ai lu trop vite , je pensais que tu voulais juste afficher le paramètre reçu
je rajoute , c'est vrai que c'est intéressant
@sciencous
non
après { espace obligatoire
avant } espace non obligatoire ( par contre ; obligatoire avant } )
mais c'est vrai que
then { echo -n " c'est nul " ; exit 65 ; echo "C" ; }
est plus agréable à lire que
then { echo -n " c'est nul ";exit 65;echo "C";}
ainsi que
then ( echo -n " c'est nul " ; exit 65 ; echo "C" )
est plus agréable à lire que
then (echo -n " c'est nul ";exit 65;echo "C")
et ça évite de se demander s'il faut espace ou pas
Dernière modification par ar barzh paour (Le 27/02/2021, à 11:06)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#8 Le 27/02/2021, à 11:48
- Watael
Re : [Résolu] parenthèses et accolades
ça évite de se demander s'il faut ou pas
avec des raisonnements comme ça, on finit par mettre des accolades autour des Développements de variables, alors que c'est i nu ti leuuuuh!!!!!
la simplicité, oui.
non au simplisme.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 27/02/2021, à 13:01
- Hizoka
Re : [Résolu] parenthèses et accolades
Ah ah ah ! vive echo "${var}" !!!
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 27/02/2021, à 13:12
- Watael
Re : [Résolu] parenthèses et accolades
quitte à faire des choses inutiles avec des accolades :
echo "${var//$var/$var}"
Dernière modification par Watael (Le 27/02/2021, à 13:12)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 27/02/2021, à 13:47
- Hizoka
Re : [Résolu] parenthèses et accolades
Génial ! c'est ce que je vais faire par défaut maintenant !
la différence de temps de traitement est minime
J'ai hâte de poser des questions avec ce genre de code
Dernière modification par Hizoka (Le 27/02/2021, à 13:48)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#12 Le 27/02/2021, à 14:38
- Tawal
Re : [Résolu] parenthèses et accolades
echo "${var//$var/$var}"
Juste pour la compréhension, tu demandes de remplacer l’occurrence $Var par l’occurrence $var dans la variable var pour ensuite afficher le résultat de la substitution.
C'est bien ça ?
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#13 Le 27/02/2021, à 15:48
- Watael
Re : [Résolu] parenthèses et accolades
je demande de remplacer le contenu de la variable par son propre contenu. c'est une blague. C'est totalement inutile.
il y a une posture, depuis quelques temps*, qui consiste à mettre des accolades lors des Développements de paramètres. C'est totalement inutile.
les accolades n'ont d'utilité que :
- pour les paramètres positionnels supérieurs à 9 : $9, ${10}...**
- lors d'une concaténation d'une variable avec du texte : echo "${var}Texte", sinon le shell va chercher une variable $varTexte, qui, au mieux, n'existe pas.
- lors d'un Remplacement de paramètre : echo "${var:1:3}", par exemple.
- pour les tableaux : printf '%s\n' "${tablo[@]}".
mais, pour afficher une variable, les accolades sont iiii nuuuu tiiii leuuuuh,
il n'y a pas lieu d'utiliser une quelconque désambiguation.
--
* c'est apparu avant l'épidémie de coronavirus.
** merci Tawal du rappel.
Dernière modification par Watael (Le 27/02/2021, à 21:40)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 27/02/2021, à 16:00
- ar barzh paour
Re : [Résolu] parenthèses et accolades
du coup je me demande bien à quoi peut servir l'exemple du post #1
et comme je suis un peu feignant j'utilise plutôt
echo "${var/$var/$var}"
, ça me fait gagner un /
Dernière modification par ar barzh paour (Le 27/02/2021, à 16:04)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#15 Le 27/02/2021, à 16:51
- Watael
Re : [Résolu] parenthèses et accolades
soit, mais là ça devient sensé.
Dernière modification par Watael (Le 27/02/2021, à 16:51)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 27/02/2021, à 17:02
- Tawal
Re : [Résolu] parenthèses et accolades
mais, pour afficher une variable, les accolades sont iiii nuuuu tiiii leuuuuh, yikes
il n'y a pas lieu d'utiliser une quelconque désambiguïsation.
KISS comme tu dirais ...
Edit: Petit ajout d'accolades obligatoires :
Pour les paramètres de position supérieurs à 9 , on a donc
$0 $1 $2 .... $9 ${10} ${11} ...
Dernière modification par Tawal (Le 27/02/2021, à 18:22)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#17 Le 27/02/2021, à 18:35
- Sciensous
Re : [Résolu] parenthèses et accolades
ok pour l'espace
les {} sont aussi utiles pour les variables avec certains caractères comme des _
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#18 Le 27/02/2021, à 18:45
- Watael
Re : [Résolu] parenthèses et accolades
les {} sont aussi utiles pour les variables avec certains caractères comme des _
oui, c'est une concaténation avec du texte (i.e. tous les caractères valides dans un nom de variable).
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 27/02/2021, à 20:54
- Hizoka
Re : [Résolu] parenthèses et accolades
Ca commence à faire beaucoup de cas... je dis ça...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#20 Le 27/02/2021, à 21:01
- Watael
Re : [Résolu] parenthèses et accolades
Pour les paramètres de position supérieurs à 9 , on a donc
$0 $1 $2 .... $9 ${10} ${11} ...
bien vu, j'édite, et j'ajoute à la liste.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 27/02/2021, à 21:27
- Tawal
Re : [Résolu] parenthèses et accolades
Et je rajouterais aussi qu'elles sont OBLIGATOIRES entre amis
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#22 Le 27/02/2021, à 21:35
- MicP
Re : [Résolu] parenthèses et accolades
Bonjour
Il y a aussi le cas où on voudrait
extraire une partie d'une chaîne qui est dans une variable :
michel@xubu:~$ maVar="/mon/chemin vers/mon.fichier.ext"
michel@xubu:~$ echo ${maVar%/*}
/mon/chemin vers
michel@xubu:~$ echo ${maVar##*/}
mon.fichier.ext
michel@xubu:~$ echo ${maVar##*.}
ext
michel@xubu:~$
et celui où on voudrait substituer une chaîne de caractères par une autre
dans la valeur d'une variable :
michel@xubu:~$ maVar="ils avaient dit qu'ils venaient"
michel@xubu:~$ echo ${maVar//il/elle}
elles avaient dit qu'elles venaient
michel@xubu:~$
Dernière modification par MicP (Le 27/02/2021, à 21:43)
Hors ligne
#23 Le 27/02/2021, à 21:38
- Watael
Re : [Résolu] parenthèses et accolades
ça fait partie des Remplacements de paramètres.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 27/02/2021, à 21:45
- MicP
Re : [Résolu] parenthèses et accolades
Ok, je ne savais pas.
Merci pour l'info
Hors ligne
#25 Le 27/02/2021, à 22:29
- Hizoka
Re : [Résolu] parenthèses et accolades
Il y a également :
a=1
b=a
echo ${!b}
# 1
et aussi :
a=test
echo ${#a}
# 4
Dernière modification par Hizoka (Le 27/02/2021, à 22:30)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne