Variables chaîne de caractères
Retour a la ligne dans une variable
https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
l'expression $' devant une chaîne permet d'y insérer des caractères d'échappements en les précédents de \.
https://www.gnu.org/software/bash/manual/html_node/Locale-Translation.html
l'expression $“ devant une chaîne convertira les caractères dans leurs forme locale.
TOTO=$"ligne1\nligne2\nligne3\n" echo -e $TOTO
ligne1 ligne2 ligne3
TOTO='ligne1 ligne2 ligne3' echo ${TOTO%%$'\n'*}
ligne1
TOTO=$"ligne1\nligne2\nligne3\n"
echo ${TOTO%%$"\n"*}
ligne1
Récupérer uniquement le nom du répertoire courant sans le chemin absolu
resultat=${PWD##*/}
Longueur d'une variable
avec ${#Variable}
VAR=azerty echo ${#VAR}
6
Nombre éléments d'un tableau
avec ${#Tableau[@]}
VAR=( un deux trois quatre ) echo ${#VAR[@]}
4
Longueur d'un élément d'un tableau
Les éléments d'un tableau sont numérotés en commençant a 0 pour le 1er élément.
avec ${#Tableau[n]}
VAR=( un deux trois quatre ) echo ${#VAR[2]}
5
Renvoi la sous-chaîne a partir du nième caractère
Les caractères d'une chaîne sont numérotés en commençant a 0 pour le 1er caractère.
renvoi la sous chaîne à partir du nième caractère et jusqu’à la fin.
Avec ${Chaine:n}
VAR=azerty echo ${VAR:3}
rty
chaîne caractères | a | z | e | r | t | y |
---|---|---|---|---|---|---|
numéro de caractère | 0 | 1 | 2 | 3 | 4 | 5 |
résultat | r | t | y |
Extraire une sous-chaîne de caractères en partant du début
Les caractères d'une chaîne sont numérotés en commençant a 0 pour le 1er caractère.
avec ${Chaîne:début:longueur}
début=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ésultat | r | t | y | u |
VAR=azertyuiop echo ${VAR:3:4}
rtyu
Extraire une sous-chaîne de caractères en partant de la fin
Les éléments d'une chaîne peuvent être numéroté en commençant par le dernier caractère. Dans ce cas, on compte en nombre négatif en commençant par le dernier caractère à (-1)
Dernier caractère à (-1).
Avant dernier caractère à (-2).
…
avec ${Chaîne:(-début):longueur}
(-début)=(-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 | - | - | - |
résultat | e | r | t | y | u |
VAR=azertyuiop echo ${VAR:(-8):5}
ertyu
Suppression de la plus courte chaîne recherché, en partant du début
chaine caractères | 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 | - | - | - |
résultat | 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
Suppression de la plus longue chaine, a partir du début
VAR=ABCABC123ABCabc echo ${VAR##A*C}
abc
suppression de la plus courte chaîne en partant de la fin
VAR=abcABC123ABCabc echo ${VAR%b*c}
abcABC123ABCa
Suppression de la plus longue chaîne en partant de la fin
${VAR%%recherche}:
VAR=abcABC123ABCabc echo ${VAR%%b*c}
a
Chercher et remplacer une sous-chaîne dans une variable
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
Chercher et remplacer la première sous-chaîne d'une variable
VAR=abcABC123ABCabc echo ${VAR/#abc/---}
---ABC123ABCabc
chercher et remplacer dernière sous-chaîne d'une variable
VAR=abcABC123ABCabc echo ${VAR/%abc/---}
abcABC123ABC---
Renvoyer une chaîne lorsque la variable est non définie
Cette syntaxe ne défini pas ou ne modifie pas la valeur de VAR.
si VAR est défini (avec une valeur ou avec nulle), on retourne sa valeur, y compris nulle, sinon, si VAR est indéfini, on retourne la chaîne choisi, ici “défaut”, sans définir la variable
unset VAR # on supprime VAR si elle existe echo ${VAR-défaut} defaut echo ${VAR} # vide
Mais si la variable a été déclaré (même sans contenu)
declare VAR # ou declare VAR="" => VAR existe, mais est nulle echo ${VAR-défaut} # vide
Renvoyer une chaîne lorsque la variable est non définie ou nulle
Cette syntaxe ne défini pas ou ne modifie pas la valeur de VAR.
Pour retourner une valeur (ici une chaîne: defaut) a une variable indéfinie ou nulle, on peut utiliser la syntaxe :
${VAR:-defaut}.
declare VAR="" # ou unset VAR, ou declare VAR echo ${VAR:-defaut}
valeur_par_defaut
Définir une variable uniquement si elle est indéfinie
définir VAR si elle est indéfinie avec ${VAR=Chaîne}
unset VAR # VAR n'est pas défini echo ${VAR=valeur_par_defaut} valeur_par_defaut echo ${VAR} valeur_par_defaut
Définir une variable uniquement si elle est indéfinie ou nulle
définir VAR lorsqu'elle est nulle ou indefinie avec ${VAR:=Chaîne}
VAR= # défini VAR a nulle echo ${VAR:=valeur_par_defaut} valeur_par_defaut
unset VAR # indéfinir VAR echo ${VAR:=valeur_par_defaut} valeur_par_defaut
retourner une chaîne si une variable est définie
unset VAR echo echo ${VAR+autre_valeur}
résultat:
# vide
VAR=valeur_1 echo ${VAR+autre_valeur}
résultat:
autre_valeur
VAR= # vide echo ${VAR+autre_valeur}
resultat:
autre_valeur
retourner une chaîne si une variable est non vide
VAR= echo ${VAR:+autre_valeur}
resultat:
# vide
VAR=TOTO echo ${VAR:+autre_valeur}
resultat:
TOTO
message d'erreur si une variable est indéfini
le message est renvoyé sur la sortie d'erreurs standard stderr avec un code retour 1.
unset TOTO # TOTO n'est pas définie echo ${TOTO?pas définie} -bash: TOTO: pas définie # message sur stderr echo $? 1 TOTO= # TOTO est définie mais vide = nulle echo ${TOTO?pas definie} # vide, valeur nulle autorisée echo $? 0
message d'erreur si une variable est nulle ou indéfini
TOTO="" echo ${TOTO:?valeur nulle} -bash: TOTO: valeur nulle #sortie sur stderr unset TOTO echo ${TOTO:?indefine} -bash: TOTO: indefine #sortie sur stderr
Conversion en minuscule
x="TOTO" echo ${x,,} toto
Si la chaîne est déjà en minuscule, pas de modification.
Conversion en minuscule d'une lettre de la chaîne
x="TOTO EST DANS LA CUISINE" echo ${x,,O} ToTo EST DANS LA CUISINE
Conversion en minuscule de plusieurs lettres de la chaîne
x="TOTO EST DANS LA CUISINE" echo ${x,,[OTAU]} toto ESt DaNS La CuISINE #ou pour un intervalle echo ${x,,[A-N]} TOTO eST danS la cUiSine #ou pour plusieurs intervalles echo ${x,,[A-EN-RS-Z]} toto est dans La cuIsIne
Conversion en majuscule
x="TOTO" echo ${x^^} toto
Si la chaîne est déjà en majuscule, pas de modification.
Premier caractère en majuscule
x="toto" echo ${x^} Toto
si le 1e caractère est déjà en majuscule, pas de modification.
Premier caractère en minuscule
x="ToTo est Dans lA cUisInE" echo ${x,} toTo est Dans lA cUisInE
si le 1e caractère est déjà en minuscule, pas de modification.
Inverse la case de la chaîne
x="ToTo est Dans lA cUisInE" echo ${x~~} tOtO EST dANS La CuISiNe
Inverse la case du 1e caractère, et ne modifie pas les autres
x="ToTo est Dans lA cUisInE" echo ${x~} toTo est Dans lA cUisInE