(→Variables bash) |
(→Suppression de la plus courte chaîne recherché, en partant du début) |
||
Ligne 107 : | Ligne 107 : | ||
TYUIOPQSD | TYUIOPQSD | ||
</pre> | </pre> | ||
+ | <br> | ||
le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents. | le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents. | ||
- | + | <br> | |
- | + | <pre> | |
- | + | ||
VAR=ABABAB_TOTO | VAR=ABABAB_TOTO | ||
- | echo ${VAR#[AB][AB][AB][AB]} | + | echo ${VAR#[AB][AB][AB][AB]} |
+ | </pre> | ||
+ | <pre> | ||
+ | AB_TOTO | ||
+ | </pre> | ||
+ | <br> | ||
==Suppression de la plus longue chaine, a partir du début== | ==Suppression de la plus longue chaine, a partir du début== |
Extrait de https://www.patpro.net/blog/index.php/2006/04/07/20-manipulations-sur-les-variables-dans-bash/
Manipulations des variables en Bash
Les exemples ci-dessous sont réalisés avec une variable nommée VAR.
le caractère générique "*", peut être utilisé, et remplace 1 ou plusieurs caractères différents.
VAR=azerty echo ${#VAR}
6
VAR=( un deux trois quatre ) echo ${#VAR[@]}
4
VAR=( un deux trois quatre ) echo ${#VAR[0]}
2
chaine caracteres | a | z | e | r | t | y |
numero de caractère | 0 | 1 | 2 | 3 | 4 | 5 |
VAR=azerty echo ${VAR:3}
rty
avec ${Variable:debut:longueur}
debut=3
longueur=4
chaine caracteres | a | z | e | r | t | y | u | i | o | p |
numero de caractère | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
decompte de la longueur | - | - | - | 1 | 2 | 3 | 4 | - | - | - |
r | t | y | u |
VAR=azertyuiop echo ${VAR:3:4}
rtyu
avec ${Variable:fin:longueur}
fin=(-8)
longueur=5
chaine caracteres | a | z | e | r | t | y | u | i | o | p |
numero de caractère | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
decompte de la longueur | - | - | 1 | 2 | 3 | 4 | 5 | - | - | - |
e | r | t | y | u |
VAR=azertyuiop echo ${VAR:(-8):5}
ertyu
chaine caracteres | a | z | e | r | E | c | h | e | r | c | h | e | t | y | U |
recherche et suppression | - | - | - | r | E | c | h | e | r | c | h | e | - | - | - |
resultat | a | z | e | t | y | U |
VAR=azerEcherchetyu ${VAR#rEcherche}
azetyU
VAR=AZERTYUIOPQSD echo ${VAR#A*R} # A*R correspond ici a AZER
TYUIOPQSD
le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents.
VAR=ABABAB_TOTO echo ${VAR#[AB][AB][AB][AB]}
AB_TOTO
VAR=ABCABC123ABCabc echo ${VAR##A*C}
abc
VAR=abcABC123ABCabc echo ${VAR%b*c}
abcABC123ABCa
${VAR%%recherche}:
VAR=abcABC123ABCabc echo ${VAR%%b*c}
a
Il y a 2 possibilités: la première occurrence ou toutes les occurrences:
${VAR/recherche/remplacé par} # première occurrence ${VAR//recherche/remplacé par} # toutes les occurrences
</br>
Dans tous les cas, c'est la sous-chaîne la plus grande correspondant à "recherche" qui sera remplacée.
VAR=abcABC123ABCabc echo ${VAR/b*c/Z}
aZ
On peut aussi viser spécifiquement le début ou la fin d'une chaîne :
VAR=abcABC123ABCabc echo ${VAR/#abc/---} # ---ABC123ABCabc echo ${VAR/%abc/---} # abcABC123ABC---
Bien définir sa variable.
Pour les cas où les variables doivent être étroitement surveillées, on dispose de quelques outils permettant par exemple de leur donner une valeur par défaut, ou de retourner une erreur quand elles ne sont pas définies.
On sait déjà que la forme ${VAR} retourne la valeur de VAR. Mettons maintenant qu'on veuille utiliser une valeur par défaut quand la valeur de VAR n'est pas définie. On peut écrire : ${VAR-defaut}. dans ce cas, si VAR existe (nulle ou pas), on retourne sa valeur, sinon, on retourne la valeur defaut, sans changer la valeur de VAR.
Si on veut que la valeur retournée soit non nulle, on peut utiliser la syntaxe : ${VAR:-defaut}.
Par exemple :
declare VAR # VAR existe, mais est nulle echo ${VAR-valeur_par_defaut} # rien echo ${VAR:-valeur_par_defaut} # valeur_par_defaut
unset VAR # VAR n'est plus définie echo ${VAR-valeur_par_defaut} # valeur_par_defaut echo ${VAR:-valeur_par_defaut} # valeur_par_defaut
Donc, si null est une valeur possible pour une variable, il convient d'utiliser la syntaxe ${VAR-defaut} qui respectera la valeur nulle. Sinon, il est plus sage d'utiliser ${VAR:-defaut}.
Il faut bien ce souvenir que cette syntaxe ne défini à aucun moment la valeur de VAR. C'est le rôle de la syntaxe ci dessous de définir VAR si elle n'est pas définie :
declare VAR # VAR existe, mais est nulle echo ${VAR=valeur_par_defaut} # rien, VAR reste nulle echo ${VAR:=valeur_par_defaut} # VAR prend la valeur # valeur_par_defaut
Si on veut maintenant utiliser une autre valeur, fixe, quand VAR est définie, sans pour autant modifier la valeur réelle de VAR, on peut procéder comme cela :
VAR=valeur_1 echo ${VAR+autre_valeur} # autre_valeur VAR= # null echo ${VAR+autre_valeur} # autre_valeur echo ${VAR:+autre_valeur} # rien
Dernier cas maintenant : on veut utiliser la valeur de VAR, mais on veut retourner un message d'erreur si la valeur est nulle ou si VAR n'est pas définie. On peut alors procéder comme cela :
unset VAR # VAR n'est pas définie echo ${VAR?pas definie} # -bash: VAR: pas definie (sur stderr)
VAR= # définie mais vide, null echo ${VAR?pas definie} # rien, valeur nulle autorisée echo ${VAR:?valeur nulle} # -bash: VAR: pas definie (sur stderr)