Unix / Linux - Mécanismes de citation dans le shell

Bonjour, futurs programmeurs ! Aujourd'hui, nous allons plonger dans le monde fascinant des mécanismes de citation dans les shells Unix et Linux. En tant que votre enseignant de informatique bienveillant du quartier, je suis là pour vous guider dans ce voyage, étape par étape. Ne vous inquiétez pas si vous n'avez jamais programmé auparavant - nous allons commencer par les bases et progresser pas à pas. Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et c'est parti !

Unix / Linux - Quoting Mechanisms

Les méta-caractères

Avant de nous lancer dans la citation, nous devons comprendre ce qu'est un méta-caractère. Dans le shell, les méta-caractères sont des caractères spéciaux qui ont un sens unique. Ils sont comme l'épice dans votre plat préféré - un peu va loin !

Voici un tableau des méta-caractères courants :

Méta-caractère Signification
* Jokers (correspond à n'importe quel nombre de caractères)
? Jokers (correspond à n'importe quel caractère unique)
> Redirection de sortie
< Redirection d'entrée
| Pipe
& Exécuter une commande en arrière-plan
; Séparateur de commandes
() Grouper des commandes
[] Classe de caractères

Regardons un exemple :

ls *.txt

Dans cette commande, le * est un méta-caractère. Il indique au shell de lister tous les fichiers se terminant par .txt. Pas mal, non ?

Mais que faire si nous voulons vraiment utiliser ces caractères comme des caractères normaux ? C'est là que la citation entre en jeu !

Les guillemets simples

Les guillemets simples sont la forme la plus simple de citation. Ils indiquent au shell de traiter tout ce qui se trouve à l'intérieur d'eux comme des caractères littéraux. C'est comme mettre vos mots dans une bulle protectrice !

Essayons un exemple :

echo 'The * is a wildcard character'

Sortie :

The * is a wildcard character

Voyez ça ? Le * n'a pas étendu pour lister tous les fichiers. Il a été traité comme un caractère normal.

Les guillemets simples sont géniaux lorsque vous voulez préserver la valeur littérale de chaque caractère dans une chaîne. Même les autres caractères de citation perdent leur signification spéciale à l'intérieur des guillemets simples !

echo 'This is a $VARIABLE with "double quotes" inside'

Sortie :

This is a $VARIABLE with "double quotes" inside

Tout ce qui se trouve à l'intérieur des guillemets simples est affiché exactement comme il est. Pas de substitutions, pas d'interprétations. Juste du texte pur et simple !

Les guillemets doubles

Les guillemets doubles sont un peu plus flexibles que leurs cousins aux guillemets simples. Ils préserve la valeur littérale de la plupart des caractères, mais permettent encore quelques substitutions. C'est comme une membrane semi-perméable pour votre texte !

Voici ce que les guillemets doubles autorisent :

  1. Substitution de variables
  2. Substitution de commandes
  3. Échappement par barre oblique inversée

Voyons quelques exemples :

NAME="Alice"
echo "Hello, $NAME!"

Sortie :

Hello, Alice!

La variable $NAME a été substituée par sa valeur. Magie !

Maintenant, essayons la substitution de commandes :

echo "Today's date is $(date)"

Sortie :

Today's date is Tue May 23 10:30:45 PDT 2023

La partie $(date) a été remplacée par la sortie de la commande date. C'est génial, non ?

Mais souvenez-vous, certains caractères conservent encore leur signification spéciale à l'intérieur des guillemets doubles :

echo "This is a newline: \n And this is a tab: \t"

Sortie :

This is a newline:
And this is a tab:

Les \n et \t ont été interprétés respectivement comme un saut de ligne et une tabulation.

Les backquotes

Les backquotes, également connues sous le nom de backticks, sont une ancienne forme de substitution de commandes. Elles sont comme des voyageurs du temps venant des premiers jours d'Unix !

Voici comment elles fonctionnent :

echo "The current directory contains `ls | wc -l` files"

Sortie :

The current directory contains 42 files

La commande entre les backquotes (ls | wc -l) est exécutée, et sa sortie est substituée dans la chaîne.

Bien que les backquotes fonctionnent encore, la syntaxe plus moderne $() est généralement préférée :

echo "The current directory contains $(ls | wc -l) files"

Cela fait la même chose mais est plus facile à imbriquer et, à mon humble avis, plus lisible. C'est comme passer d'un téléphone à clapet à un smartphone - même fonction de base, mais beaucoup plus convivial !

Mettre tout ensemble

Maintenant que nous avons exploré tous ces mécanismes de citation, mettons-les en œuvre dans un petit script amusant :

#!/bin/bash

NAME="World"
GREETING='Hello'
DATE=$(date +"%A, %B %d, %Y")

echo "$GREETING, $NAME!"
echo 'Today is not actually $DATE'
echo "But for real, today is $DATE"
echo "There are `ls | wc -l` files in this directory"

Si nous exécutons ce script, nous pourrions obtenir une sortie comme :

Hello, World!
Today is not actually $DATE
But for real, today is Tuesday, May 23, 2023
There are 42 files in this directory

Voyez-vous comment chaque type de guillemet affecte la sortie ? Les guillemets simples préserve tout littéralement, les guillemets doubles permettent des substitutions, et les backquotes (ou $()) effectuent la substitution de commandes.

Et voilà, les amis ! Vous avez appena fait vos premiers pas dans le monde des mécanismes de citation dans le shell. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces concepts. Avant de savoir, vous citerez comme un pro !

Bonne programmation, et que le shell soit avec vous ! ??

Credits: Image by storyset