#1 Le 20/12/2022, à 19:37
- diesel
[RÉSOLU] substitutions en bash
J'ai une variable toto égale à : "abc.def.ghi.jkl"
Je veux, tout d'abord ne garder que les premiers caractères avant le premier ".". Donc, j'écris
echo ${toto%%.*}
Jusque là, tout va bien, j'obtiens bien "abc".
Maintenant, je veux, en plus transformer la chaîne de caractères "abc" en majuscules. Donc "ABC".
Naïvement, j’écris :
echo ${${toto%%.*}^^}
et là, j'ai droit à un : "bash: ${${toto%%.*}^^} : mauvaise substitution".
Où est-ce que j'ai merdé ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 20/12/2022, à 21:13)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 20/12/2022, à 19:54
- MicP
Re : [RÉSOLU] substitutions en bash
Bonjour
essaye plutôt comme ça :
toto=${toto%%.*}; echo "${toto^^}"
ou bien :
mic@deb1156:~$ toto=abc.def.ghi.jkl
mic@deb1156:~$ toto=${toto%%.*}; toto=${toto^^}
mic@deb1156:~$ echo "$toto"
ABC
mic@deb1156:~$
(Avec l'exemple que tu as donné ça fonctionne aussi sans les guillemets, mais ça ne coûte rien d'en mettre.)
mic@deb1156:~$ toto=$(echo -e "\na\tx \nbc.d e\tf.g\nhi.j kl")
mic@deb1156:~$ echo $toto
a x bc.d e f.g hi.j kl
mic@deb1156:~$ echo "$toto"
a x
bc.d e f.g
hi.j kl
mic@deb1156:~$ toto=${toto%%.*}; toto=${toto^^}
mic@deb1156:~$ echo $toto
A X BC
mic@deb1156:~$ echo "$toto"
A X
BC
mic@deb1156:~$
Dernière modification par MicP (Le 21/12/2022, à 01:33)
Hors ligne
#3 Le 20/12/2022, à 20:38
- diesel
Re : [RÉSOLU] substitutions en bash
Oui, bien sûr, je peux écrire :
temp=${toto%%.*} ; echo ${temp^^}
Je crois comprendre que ça ne fonctionne pas parce que si toto est bien un paramètre, le résultat de ${toto%%.*} n'en est pas un, lui.
Je vais regarder dans le man de bash s'il est possible de créer "au vol" un paramètre sur un résultat.
[EDIT] J'ai relu le man de bash et je n'ai rien trouvé ; et je crois que ce n'est pas possible. Je vais me contenter de la syntaxe ci-dessus. [/EDIT]
Merci MicP.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 20/12/2022, à 21:14)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#4 Le 20/12/2022, à 23:08
- Hizoka
Re : [RÉSOLU] substitutions en bash
Bonsoir, je confirme que tu ne peux pas cumuler les substitutions dans une seule commande.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 21/12/2022, à 13:22
- diesel
Re : [RÉSOLU] substitutions en bash
Oui, je suis arrivé à la même conclusion, même si je trouve ça dommage.
Merci pour la confirmation.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#6 Le 21/12/2022, à 21:22
- Tawal
Re : [RÉSOLU] substitutions en bash
Hello,
Non, ce n'est pas dommage, c'est compréhensible.
Et tu as presque donné la raison au #3.
${toto%%.*}
est un résultat de substitution sur une variable et non un nom de variable.
En une seule commande
$ a="abc.def.ghi.jkl"
$ sed -e 's/\..*$//; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' <<<"$a"
ABC
$
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
#7 Le 21/12/2022, à 22:00
- pingouinux
Re : [RÉSOLU] substitutions en bash
Bonsoir,
Autre solution :
$ a="abc.def.ghi.jkl"
$ sed -r 's/\..*$//;s/(.*)/\U\1/' <<<"$a"
ABC
Hors ligne
#8 Le 21/12/2022, à 22:11
- Watael
Re : [RÉSOLU] substitutions en bash
hmmm... entre deux substitutions et dégainer sed pour traiter une pauvre chaîne, devinez quoi ! je préfère la solution 100% bash.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#9 Le 21/12/2022, à 22:13
- Tawal
Re : [RÉSOLU] substitutions en bash
De ma part c'était une blague, mais avec l'intervention de pingouinux j'apprends en peu plus de sed
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
#10 Le 21/12/2022, à 23:22
- diesel
Re : [RÉSOLU] substitutions en bash
Hello,
Non, ce n'est pas dommage, c'est compréhensible.
Ce n'est pas parce que j'ai compris pourquoi je ne peux pas faire ce dont j'ai envie que ça m'empêche de trouver ça dommage.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 22/12/2022, à 13:22)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne