(→Renvoyer une valeur de substitution lorsque la variable n'existe pas) |
(→Suppression de la plus courte chaîne recherché, en partant du début) |
||
Ligne 111 : | Ligne 111 : | ||
<br> | <br> | ||
[AB] signifie le caractère A ou le caractère B<br> | [AB] signifie le caractère A ou le caractère B<br> | ||
- | [AB[AB][AB][AB] signifie 4 caractères ( | + | [AB[AB][AB][AB] signifie 4 caractères ( A ou B) qui se suivent |
<br> | <br> | ||
<pre> | <pre> |
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
le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents.
VAR=AZERTYUIOPQSD echo ${VAR#A*R} # A*R correspond ici a AZER
TYUIOPQSD
[AB] signifie le caractère A ou le caractère B
[AB[AB][AB][AB] signifie 4 caractères ( A ou B) qui se suivent
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
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
VAR=abcABC123ABCabc echo ${VAR/#abc/---}
---ABC123ABCabc
VAR=abcABC123ABCabc echo ${VAR/%abc/---}
abcABC123ABC---
si VAR existe (nulle ou pas), on retourne sa valeur, sinon, on retourne la valeur defaut, sans changer la valeur de VAR.
unset VAR # on supprime VAR si elle existe echo ${VAR-defaut}
defaut
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 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)