Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 lol

$ 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. big_smile


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 smile


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

Tawal a écrit :

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