info:bash:variables_chaine_de_caracteres

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
resultat=${PWD##*/}

avec ${#Variable}

VAR=azerty 
echo ${#VAR} 
6

avec ${#Tableau[@]}

VAR=( un deux trois quatre )
echo ${#VAR[@]}
4

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

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

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

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

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


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---

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

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 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 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


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
VAR=
echo ${VAR:+autre_valeur}	

resultat:

   # vide
VAR=TOTO
echo ${VAR:+autre_valeur}	

resultat:

TOTO

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
TOTO=""
echo ${TOTO:?valeur nulle}	
-bash: TOTO: valeur nulle #sortie sur stderr
unset TOTO
echo ${TOTO:?indefine}	
-bash: TOTO: indefine     #sortie sur stderr
x="TOTO"
echo ${x,,}
toto

Si la chaîne est déjà en minuscule, pas de modification.

x="TOTO EST DANS LA CUISINE"
echo ${x,,O}
ToTo EST DANS LA CUISINE
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
x="TOTO"
echo ${x^^}
toto

Si la chaîne est déjà en majuscule, pas de modification.

x="toto"
echo ${x^}
Toto

si le 1e caractère est déjà en majuscule, pas de modification.

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.

x="ToTo est Dans lA cUisInE"
echo ${x~~}
tOtO EST dANS La CuISiNe
x="ToTo est Dans lA cUisInE"
echo ${x~}
toTo est Dans lA cUisInE
  • /home/franck/dokuwiki/doc/data/pages/info/bash/variables_chaine_de_caracteres.txt
  • Dernière modification : 2023/04/04 19:34
  • de franck