======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 {| border="2" style="text-align: center; font-weight: bold;" ! style="width: 25%"| 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\\ {| border="2" style="text-align: center; font-weight: bold;" ! style="width: 25%"| 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\\ {| border="2" style="text-align: center; font-weight: bold;" ! style="width: 25%"| 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===== {| border="2" style="text-align: center; font-weight: bold;" ! style="width: 25%"| 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