nom=valeur
Ces deux syntaxes fonctionnent:
echo ${nom}
echo $nom
Le fait d’afficher une variable s’appuie sur un mécanisme du Shell nommé l’expansion de variable.
L’expansion a lieu:
$
suivi d’un nom de
variable$
suivi d’une expression entre
accolades : {expression}
Voir le paragraphe EXPANSION du manuel Bash
echo "$valeur" # Toujours utiliser les guillemets quand on utilise une variable
Les single quotes
(ou apostrophes) empêchent l’expansion
de variable:
$ echo '$valeur'
$valeur
valeur="Je
suis
ici"
valeur="chaine"
valeur='chaine'
À éviter:
valeur=chaine
valeur="chaine avec espace"
valeur='chaine avec espace'
$ echo ${#valeur}
18
$ echo "${valeur}s"
regardez bien cecis
$ valeur="regardez bien ceci"
$ echo "$valeur"
regardez bien ceci
Ceci fonctionne aussi (on ajoute par exemple un point .
juste après le nom):
$ echo "$valeur."
regardez bien ceci.
Si on remplace le point par un s
:
$ echo "$valeurs"
La variable valeurs
est différente de la variable
valeur
: ici elle est vide
$ valeur="regardez bien ceci"
$ echo ${valeur:0:8}
regardez
$ valeur="regardez bien ceci"
$ echo ${valeur:9:4}
bien
$ valeur="regardez bien ceci"
$ echo "${valeur:8}"
bien ceci
$ valeur="regardez bien ceci"
$ echo "${valeur::8}"
regardez
Récupération des trois dernières lettres
$ echo "${valeur: -3:3}."
eci.
L’espace est indispensable: ce qui suit ne permettra pas de récupérer les trois dernières lettres
$ echo "${valeur:-3:3}."
regardez bien ceci.
$ valeur="regardez bien ceci"
$ echo "${valeur% ceci}."
regardez bien.
$ valeur="regardez bien ceci"
$ echo "${valeur#regardez }."
bien ceci.
$ valeur="regardez bien ceci"
$ echo "${valeur%e*}."
regardez bien c.
$ valeur="regardez bien ceci"
$ echo "${valeur%%e*}."
r.
$ valeur="regardez bien ceci"
$ echo "${valeur%% ceci}."
regardez bien.
$ cible=test.txt
$ echo "${cible%.txt}"
test
$ echo "${cible%%.txt}"
test
$ echo "${cible##test.}"
txt
$ echo "${cible##*.}"
txt
$ valeur="regardez bien ceci"
$ echo ${valeur^}
Regardez bien ceci
$ echo ${valeur^^}
REGARDEZ BIEN CECI
$ echo ${valeur^^e}
rEgardEz biEn cEci
$ echo ${valeur^e}
regardez bien ceci
$ majuscule="REGARDEZ VRAIMENT ICI"
$ echo ${majuscule,,}
regardez vraiment ici
$ echo ${majuscule,}
rEGARDEZ VRAIMENT ICI
$ MIX="CECI est IMPortant"
$ echo ${MIX~~}
ceci EST impORTANT
$ ls *
aa.txt ab.txt ac.txt ba.txt bb.txt bc.txt
$ fichiers=(*)
$ echo "${fichiers[@]}"
Aa.txt Ab.txt Ac.txt Ba.txt Bb.txt Bc.txt
$ echo "${fichiers[@]^}"
Aa.txt Ab.txt Ac.txt Ba.txt Bb.txt Bc.txt
$ echo "${fichiers[@]^^}"
AA.TXT AB.TXT AC.TXT BA.TXT BB.TXT BC.TXT
$ echo "${fichiers[@]~~}"
aA.TXT aB.TXT aC.TXT bA.TXT bB.TXT bC.TXT
$ echo "${fichiers[@],,}"
aa.txt ab.txt ac.txt ba.txt bb.txt bc.txt
Écrire un programme nommé convertir_html
qui:
sed
$ valeur="las, ceci est cela"
$ echo "${valeur/la/Hela}"
Helas, ceci est cela
$ echo "${valeur/#la/Hela}" # Debut de chaine
Helas, ceci est cela
$ echo "${valeur/%la/Hela}" # Fin de chaine
las, ceci est ceHela
$ echo "${fichiers[@]/%txt/md}"
a.md b.md c.md
$ echo "${fichiers[@]/txt/md}"
a.md b.md c.md
$