GNU/Linux >> Tutoriels Linux >  >> Linux

Différence entre les guillemets simples et doubles dans Bash Shell

Vous utiliserez souvent des guillemets dans la ligne de commande Linux. Traiter avec des espaces dans le nom de fichier? Vous utilisez des guillemets. Gérer les caractères spéciaux ? Vous utilisez à nouveau des guillemets.

Les guillemets sont une "fonctionnalité spéciale" dans le shell Linux et cela peut prêter à confusion, surtout si vous débutez avec les commandes Linux et les scripts shell.

J'expliquerai les différents types de guillemets et leur utilisation dans les scripts shell.

Il existe quatre types différents de guillemets :

  • Apostrophe '
  • Citation double "
  • Barre oblique inverse \
  • Citation arrière `

À l'exception du jeu, les trois autres caractères apparaissent par paires.

Voyons-les en détail.

1. Guillemet simple

Le guillemet simple dans Shell ignore tous les types de caractères spéciaux qu'il contient. Tout ce qui se trouve entre les guillemets simples est considéré comme un seul élément.

Prenons-le avec exemple. Voici un exemple de fichier texte avec des joueurs de cricket des années 90.

[email protected]:~$ cat cricket 
Allan Donald, South Africa
Steve Waugh, Australia
Mark Waugh, Australia
Henry Olonga, Zimbabwe
Sachin Tendulkar, India

Maintenant, vous utilisez la commande grep pour rechercher des joueurs de cricket avec le nom de famille Waugh. Cela vous donnera deux résultats :

[email protected]:~$ grep Waugh cricket
Steve Waugh, Australia
Mark Waugh, Australia

Mais si vous souhaitez rechercher uniquement Steve Waugh et que vous essayez de l'utiliser tel quel, vous verrez une erreur :

[email protected]:~$ grep Steve Waugh cricket
grep: Waugh: No such file or directory
cricket:Steve Waugh, Australia

Pourquoi? Parce que l'espace est utilisé pour séparer la commande, les options et les arguments. Dans l'exemple ci-dessus, il faut Steve comme premier argument de grep mais Waugh et cricket sont considérés comme les fichiers dans lesquels il doit effectuer la recherche. Puisqu'il n'y a pas de fichier nommé Waugh , il jette une erreur pour cela. En même temps, il affiche également le résultat du fichier cricket .

C'est là que la citation vient à la rescousse. Lorsque vous placez les arguments entre guillemets, cela est interprété comme une seule entité.

[email protected]:~$ grep 'Steve Waugh' cricket
Steve Waugh, Australia

Fondamentalement, lorsque le shell voit le premier guillemet simple, il ignore tous les caractères spéciaux (l'espace blanc est également un caractère spécial) jusqu'à ce qu'il trouve un autre guillemet simple (guillemets fermants).

Ignorer tous les caractères spéciaux

Tous les caractères spéciaux perdent leur signification s'ils sont entourés de guillemets simples. Voyons cela avec des exemples.

Déclarons une variable en shell. Si vous renvoyez le nom de la variable avec $, il affiche la valeur de la variable.

[email protected]:~$ var=my_variable
[email protected]:~$ echo $var
my_variable

Mais si vous l'enveloppez de guillemets simples, $ perdra son pouvoir spécial.

[email protected]:~$ echo '$var'
$var

Maintenant seulement ça. La touche Entrée est également conservée sous des guillemets simples.

[email protected]:~$ echo 'how are
> you?'
how are
you?

2. Guillemet double

Les guillemets doubles fonctionnent presque de la même manière que les guillemets simples. Presque parce qu'ils ont aussi tendance à ignorer tous les caractères spéciaux sauf :

  • Le dollar signe $
  • Citations arrière `
  • Barres obliques inverses \

Puisque le signe dollar n'est pas ignoré, vous pouvez vous attendre à ce que le nom de la variable soit remplacé par sa valeur. Ce qui n'est pas le cas avec les guillemets simples.

[email protected]:~$ var=my_variable
[email protected]:~$ echo "$var"
my_variable
[email protected]:~$ echo '$var'
$var

Les guillemets doubles peuvent être utilisés pour masquer les guillemets simples du shell.

[email protected]:~$ var=My 'own villa' is yellow
own villa: command not found
[email protected]:~$ var="My 'own villa' is yellow"
[email protected]:~$ echo $var
My 'own villa' is yellow

De même, vous pouvez utiliser les guillemets simples pour masquer les guillemets doubles du shell.

[email protected]:~$ var=he said, "Awesome!"
said,: command not found
[email protected]:~$ var='he said, "Awesome!"'
[email protected]:~$ echo $var
he said, "Awesome!"

3. Barre oblique inverse

La barre oblique inverse revient à mettre des guillemets simples autour d'un seul caractère. La barre oblique inverse "échappe" au caractère avant lequel elle est placée.

Cela signifie que le caractère suivi de la barre oblique inverse perdra sa signification particulière (le cas échéant).

[email protected]:~$ var=variable
[email protected]:~$ echo \var
var
[email protected]:~$ echo $var
variable
[email protected]:~$ echo \$var
$var

Parce que v n'a pas de signification particulière, echo \var imprime simplement var. En revanche, lorsqu'il est utilisé avec $var , la barre oblique inverse échappe à la signification spéciale de $ et donc il est imprimé comme $var au lieu de la valeur de var .

Continuer la ligne avec antislash

Vous remarquerez une autre utilisation pratique du caractère barre oblique inverse en continuant une seule commande sur plusieurs lignes.

Lorsqu'une commande est trop longue ou s'il s'agit d'une combinaison de commandes, certains sites Web utilisent une barre oblique inverse pour afficher la commande unique sur plusieurs lignes. Cela rend la commande/le code plus lisible.

Prenez cette longue commande par exemple.

docker run --name server --network net -v html:/usr/share/nginx/html -v $PWD/custom-config.conf:/etc/nginx/nginx.conf -p 80:80 --restart on-failure -d nginx:latest

La même commande peut être décomposée en plusieurs lignes grâce aux antislashs.

docker run --name server --network net \
-v html:/usr/share/nginx/html \
-v $PWD/custom-config.conf:/etc/nginx/nginx.conf \
-p 80:80 --restart on-failure -d nginx:latest

C'est la même commande, juste un peu plus facile à comprendre.

Barre oblique inverse entre guillemets doubles

La barre oblique inverse est l'un des trois caractères spéciaux qui conserve sa signification particulière avec le signe dollar et les guillemets arrière.

De cette façon, vous pouvez utiliser une barre oblique inverse pour échapper à la signification particulière du signe dollar, des guillemets doubles et des guillemets arrière entre guillemets doubles.

Prenons l'exemple ci-dessous où $5 est considérée comme une variable non déclarée et n'a donc aucune valeur. C'est pourquoi il est ignoré de la sortie de la commande echo.

[email protected]:~$ echo "Meal costs $5.25"
Meal costs .25

Pour utiliser ce $ sans être interprété comme la valeur d'une variable, il faut lui échapper avec /.

[email protected]:~$ echo "Meal costs \$5.25"
Meal costs $5.25

Ici, la barre oblique inverse (\) est interprétée pour sa superpuissance, qui est d'échapper à la signification spéciale du caractère suivant.

4. Citations arrière

Le dernier de cette liste est des guillemets et il a une signification particulière. Il est utilisé pour la substitution de commandes.

Le shell a cette fonctionnalité de substitution de commande où une commande spécifiée est remplacée par la sortie de la commande.

Dans l'exemple ci-dessous, `date` est remplacé par la sortie de la commande date indiquant la date et l'heure actuelles du système Linux.

[email protected]:~$ echo The current date and time is `date`
The current date and time is Monday 23 August 2021 04:55:18 PM IST

Une chose à garder à l'esprit est que la substitution n'aura lieu que s'il y a une commande entre les guillemets arrières. Sinon, il est affiché tel quel.

[email protected]:~$ echo 'The current date and time is `late`'
The current date and time is `late`

Encore une fois, les guillemets doubles interprètent les guillemets inverses mais les guillemets simples ignorent sa signification particulière.

Pendant des années, les apostrophes ont été utilisées pour la substitution de commandes dans les scripts Shell. Mais de nos jours, les systèmes UNIX et Linux modernes préfèrent le $(command) construire à la place.

[email protected]:~$ echo The current date and time is $(date)
The current date and time is Monday 23 August 2021 05:55:47 PM IST

Restez avec le temps et arrêtez d'utiliser les guillemets arrière maintenant.

J'espère que vous comprenez mieux les guillemets sous Linux et les scripts shell maintenant.

Veuillez laisser vos suggestions et questions dans la section des commentaires.


Linux
  1. Quelle est la différence entre nohup et esperluette

  2. Commande bash alias avec guillemets simples et doubles

  3. Différence entre ${} et $() dans Bash

  4. Quelle est la différence entre exécuter un script Bash et le sourcer ?

  5. Différence entre '{}' et {} dans la commande find ?

Différence entre la définition de variables bash avec et sans exportation

Quelle est la différence entre la connexion et le shell sans connexion

Différence entre " et " sur la ligne de commande (bash) ? ?

La différence d'utilisation entre les variables shell et les variables d'environnement ?

Linux – Quelle est la différence entre `su -` et `su –login` ?

Quelle est la différence entre une console, un terminal et un shell ?