Aller au contenu
Administration Linux medium

Expansions du shell

6 min de lecture

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.

  • 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

Le globbing (expansion de motifs) est le mécanisme le plus utilisé. Le shell remplace les motifs par la liste des fichiers qui correspondent.

Fenêtre de terminal
ls *.txt

Affiche tous les fichiers qui se terminent par .txt dans le répertoire courant.

Fenêtre de terminal
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 »
Fenêtre de terminal
ls fichier?.txt

Correspond à 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 »
Fenêtre de terminal
ls fichier[123].txt

Correspond à fichier1.txt, fichier2.txt, fichier3.txt.

Vous pouvez aussi utiliser un intervalle :

Fenêtre de terminal
ls fichier[a-z].txt

Correspond à fichiera.txt, fichierb.txt, etc.

Fenêtre de terminal
ls /var/log/*.log
ls /etc/*.d/
ls *.{txt,md}

Pour voir ce que le shell va étendre, utilisez echo au lieu de la commande réelle :

Fenêtre de terminal
echo *.txt

Le shell affiche la liste des fichiers correspondants sans rien exécuter.

Les accolades {} permettent de générer une liste de valeurs. Contrairement au globbing, les accolades ne dépendent pas des fichiers existants.

Fenêtre de terminal
echo {rouge,vert,bleu}
Résultat
rouge vert bleu

Utile pour créer plusieurs dossiers d’un coup :

Fenêtre de terminal
mkdir -p projet/{src,docs,tests}

Crée trois sous-dossiers dans projet/.

Fenêtre de terminal
echo {1..5}
Résultat
1 2 3 4 5
Fenêtre de terminal
touch fichier{01..10}.txt

Crée fichier01.txt à fichier10.txt.

Fenêtre de terminal
echo {a..f}
Résultat
a b c d e f

Le caractère ~ est remplacé par le chemin de votre répertoire personnel :

Fenêtre de terminal
echo ~
Résultat
/home/bob

~/Documents équivaut à /home/bob/Documents.

La syntaxe $(commande) exécute la commande entre parenthèses et remplace le tout par sa sortie :

Fenêtre de terminal
echo "Nous sommes le $(date +%d/%m/%Y)"
Résultat
Nous sommes le 06/04/2026

Autre exemple — stocker le résultat dans une variable :

Fenêtre de terminal
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.

Pour faire un calcul entier :

Fenêtre de terminal
echo $((3 + 7))
Résultat
10

Opérateurs disponibles : +, -, *, / (division entière), % (modulo).

Fenêtre de terminal
TOTAL=$((512 * 1024))
echo "$TOTAL octets"

Le choix des guillemets détermine si le shell interprète ou non les variables et les expansions.

Fenêtre de terminal
NOM="Alice"
echo "Bonjour $NOM"
Résultat
Bonjour Alice

Les 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 »
Fenêtre de terminal
echo 'Bonjour $NOM'
Résultat
Bonjour $NOM

Le texte est pris littéralement.

SituationGuillemets
Texte avec variables à remplacer"..."
Texte littéral sans remplacement'...'
Commande avec espaces dans un chemin"..."
SymptômeCause probableSolution
ls *.txt affiche « No matches found »Aucun fichier .txt dans le répertoireVé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éralVariable entourée de guillemets simples '...'Utiliser des guillemets doubles "..."
$(commande) ne fonctionne pasParenthèses incorrectes ou commande inexistanteVérifier la commande seule d’abord
Calcul retourne 0 au lieu du résultatDivision entière ou syntaxe $() au lieu de $(())Utiliser $(( )) avec doubles parenthèses
  • 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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn