[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Linux-31] Remplacer des lettres par des nombres avec tr



Salut,
Le 08/03/2020 à 12:44, Claude MICOUIN (via linux-31 Mailing List) a écrit :
>> 	L="${tab%${i}*}"
> Ici, on définit une variable L à partir des variable i et tab? L'idée
> est de garder la liste des premières lettres jusqu'à i-1 (par exemple
> pour r, on s'arrête à q), c'est bien ça ?

Exactement.

> Par contre, j'ai pas réussi à comprendre ça fonctionne dans le
> détail... (% n'a rien à voir avec modulo je suppose)
>

Voir la man bash au paragraphe "Remplacement des paramètre"

Cette commande devrait t'y amener directement :

man -P "less -p \"^ +Remplacement des paramètres\"" bash

Retrait  du motif correspondant au préfixe (# et ##)
Retrait  du motif correspondant au suffixe (% et %%)


> 
>> 	R="${#L}"
> Ici, j'imagine qu'on compte le nombre de caractères. Mais comment?...
> 

Toujours dans le man bash au paragraphe "Remplacement des paramètre"
Voir "Longueur du paramètre"
Ça compte tout simplement la longueur de la chaîne contenue dans la
variable.

> 
>> 	((R++))
> On rajoute un pour compenser le i-1
>> 	printf "${R} "
> Et ici on affiche le résultat.
> 

C'est tout a fait ça ;-)

Par contre la seconde solution avec un tableau est beaucoup plus simple
et peut même prendre en compte la différence de casse.
Il suffit de changer la ligne :

printf "${array[${i}]} "

par :

printf "${array[${i,}]} "

La différence est subtile, la virgule après le "i" qui convertit
automatiquement une lettre majuscule en minuscule :

$ ./array.sh a Z z A M e E m
1 26 26 1 13 5 5 13

Bon dimanche.
@
JP