Quand vous tapez ls *.txt, le shell remplace *.txt par la liste des
fichiers correspondants avant de lancer ls. C’est une expansion : le shell
transforme ce que vous écrivez en quelque chose de plus précis. Comprendre ces
mécanismes permet d’écrire des commandes courtes et puissantes au lieu de
répéter les mêmes opérations à la main.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Utiliser les jokers (
*,?,[...]) pour cibler des fichiers - Générer des séquences avec les accolades
{a,b}et{1..5} - Utiliser le tilde
~comme raccourci vers le répertoire personnel - Injecter le résultat d’une commande avec
$() - Faire un calcul simple avec
$(()) - Choisir entre guillemets simples et doubles
Globbing : les jokers
Section intitulée « Globbing : les jokers »Le globbing (expansion de motifs) est le mécanisme le plus utilisé. Le shell remplace les motifs par la liste des fichiers qui correspondent.
L’étoile * — zéro ou plusieurs caractères
Section intitulée « L’étoile * — zéro ou plusieurs caractères »ls *.txtAffiche tous les fichiers qui se terminent par .txt dans le répertoire
courant.
ls rapport*Affiche tous les fichiers dont le nom commence par rapport.
Le point d’interrogation ? — exactement un caractère
Section intitulée « Le point d’interrogation ? — exactement un caractère »ls fichier?.txtCorrespond à fichier1.txt, fichierA.txt, mais pas à fichier12.txt (deux
caractères après fichier).
Les crochets [...] — un caractère parmi une liste
Section intitulée « Les crochets [...] — un caractère parmi une liste »ls fichier[123].txtCorrespond à fichier1.txt, fichier2.txt, fichier3.txt.
Vous pouvez aussi utiliser un intervalle :
ls fichier[a-z].txtCorrespond à fichiera.txt, fichierb.txt, etc.
Combiner les jokers
Section intitulée « Combiner les jokers »ls /var/log/*.logls /etc/*.d/ls *.{txt,md}Tester sans risque
Section intitulée « Tester sans risque »Pour voir ce que le shell va étendre, utilisez echo au lieu de la commande
réelle :
echo *.txtLe shell affiche la liste des fichiers correspondants sans rien exécuter.
Accolades : générer des séquences
Section intitulée « Accolades : générer des séquences »Les accolades {} permettent de générer une liste de valeurs. Contrairement au
globbing, les accolades ne dépendent pas des fichiers existants.
Liste explicite
Section intitulée « Liste explicite »echo {rouge,vert,bleu}rouge vert bleuUtile pour créer plusieurs dossiers d’un coup :
mkdir -p projet/{src,docs,tests}Crée trois sous-dossiers dans projet/.
Séquence numérique
Section intitulée « Séquence numérique »echo {1..5}1 2 3 4 5touch fichier{01..10}.txtCrée fichier01.txt à fichier10.txt.
Séquence alphabétique
Section intitulée « Séquence alphabétique »echo {a..f}a b c d e fTilde : raccourci vers home
Section intitulée « Tilde : raccourci vers home »Le caractère ~ est remplacé par le chemin de votre répertoire personnel :
echo ~/home/bob~/Documents équivaut à /home/bob/Documents.
Substitution de commande : $()
Section intitulée « Substitution de commande : $() »La syntaxe $(commande) exécute la commande entre parenthèses et remplace le
tout par sa sortie :
echo "Nous sommes le $(date +%d/%m/%Y)"Nous sommes le 06/04/2026Autre exemple — stocker le résultat dans une variable :
NB_FICHIERS=$(ls | wc -l)echo "Il y a $NB_FICHIERS fichiers ici"La substitution de commande est très utile dans les scripts pour capturer dynamiquement des informations.
Arithmétique : $(())
Section intitulée « Arithmétique : $(()) »Pour faire un calcul entier :
echo $((3 + 7))10Opérateurs disponibles : +, -, *, / (division entière), % (modulo).
TOTAL=$((512 * 1024))echo "$TOTAL octets"Guillemets : simples vs doubles
Section intitulée « Guillemets : simples vs doubles »Le choix des guillemets détermine si le shell interprète ou non les variables et les expansions.
Guillemets doubles "..." — le shell interprète
Section intitulée « Guillemets doubles "..." — le shell interprète »NOM="Alice"echo "Bonjour $NOM"Bonjour AliceLes expansions $NOM, $(commande) et $((calcul)) sont interprétées.
Guillemets simples '...' — le shell n’interprète rien
Section intitulée « Guillemets simples '...' — le shell n’interprète rien »echo 'Bonjour $NOM'Bonjour $NOMLe texte est pris littéralement.
Quand utiliser lequel ?
Section intitulée « Quand utiliser lequel ? »| Situation | Guillemets |
|---|---|
| Texte avec variables à remplacer | "..." |
| Texte littéral sans remplacement | '...' |
| Commande avec espaces dans un chemin | "..." |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
ls *.txt affiche « No matches found » | Aucun fichier .txt dans le répertoire | Vérifier avec ls puis ajuster le motif |
mkdir {a,b,c} crée un seul dossier {a,b,c} | Espace après la virgule ou guillemets simples autour | Écrire {a,b,c} sans espaces et sans '...' |
$NOM affiche le texte littéral | Variable entourée de guillemets simples '...' | Utiliser des guillemets doubles "..." |
$(commande) ne fonctionne pas | Parenthèses incorrectes ou commande inexistante | Vérifier la commande seule d’abord |
| Calcul retourne 0 au lieu du résultat | Division entière ou syntaxe $() au lieu de $(()) | Utiliser $(( )) avec doubles parenthèses |
À retenir
Section intitulée « À retenir »- Le globbing (
*,?,[...]) fait correspondre des noms de fichiers existants. - Les accolades
{a,b}et{1..5}génèrent des listes, indépendamment des fichiers. ~est le raccourci vers votre répertoire personnel.$(commande)injecte le résultat d’une commande dans une autre.$(())permet les calculs entiers.- Les guillemets doubles
"..."interprètent les variables, les simples'...'non.