Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Double citation

Le premier type de citation que nous examinerons est double citation. Si nous plaçons du texte à l'intérieur de guillemets doubles, tous les caractères spéciaux utilisés par le shell perdent leur signification spéciale et sont traités comme des caractères ordinaires. Les exceptions sont « $ », « \ » (barre oblique inverse) et « » (guillemet arrière). Cela signifie que le fractionnement de mots, l'expansion de nom de chemin, l'expansion de tilde et l'expansion d'accolades sont supprimés, mais l'expansion de paramètres, l'expansion arithmétique et la substitution de commandes sont toujours effectuées. En utilisant des guillemets doubles, nous pouvons gérer les noms de fichiers contenant des espaces intégrés. Disons que nous avons été l'infortunée victime d'un dossier appelé deux mots.txt. Si nous essayions de l'utiliser sur la ligne de commande, le fractionnement de mots ferait en sorte que cela soit traité comme deux arguments distincts plutôt que comme l'argument unique souhaité :



[moi@linuxbox ~]$ ls -l deux mots.txt

ls : ne peut pas accéder à deux : aucun fichier ou répertoire de ce type

ls : ne peut pas accéder à words.txt : aucun fichier ou répertoire de ce type

[moi@linuxbox ~]$ ls -l deux mots.txt

ls : ne peut pas accéder à deux : aucun fichier ou répertoire de ce type

ls : ne peut pas accéder à words.txt : aucun fichier ou répertoire de ce type


En utilisant des guillemets doubles, nous arrêtons le fractionnement des mots et obtenons le résultat souhaité ; plus loin, nous pouvons même réparer les dégâts :



[moi@linuxbox ~]$ ls -l "deux mots.txt"

-rw-rw-r-- 1 moi moi 18 2016-02-20 13:03 deux mots.txt [me@linuxbox ~]$ mv "deux mots.txt" deux_mots.txt

[moi@linuxbox ~]$ ls -l "deux mots.txt"

-rw-rw-r-- 1 moi moi 18 2016-02-20 13:03 deux mots.txt [me@linuxbox ~]$ mv "deux mots.txt" deux_mots.txt


Là! Maintenant, nous n'avons plus à taper ces guillemets doubles embêtants.

N'oubliez pas que l'expansion des paramètres, l'expansion arithmétique et la substitution de commandes ont toujours lieu entre guillemets :


image

[moi@linuxbox ~]$ echo "$USER $((2+2)) $(cal)"

moi 4 février 2016


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


Nous devrions prendre un moment pour examiner l'effet des guillemets doubles sur la substitution de commandes. Examinons d'abord un peu plus le fonctionnement du fractionnement de mots. Dans notre exemple précédent, nous avons vu comment le fractionnement des mots semble supprimer les espaces supplémentaires dans notre texte :


[moi@linuxbox ~]$ écho c'est un

c'est un test

tester

[moi@linuxbox ~]$ écho c'est un

c'est un test


image

Par défaut, le fractionnement de mots recherche la présence d'espaces, de tabulations et de sauts de ligne (caractères de saut de ligne) et les traite comme délimiteurs entre les mots. Cela signifie que les espaces sans guillemets, les tabulations et les sauts de ligne ne sont pas considérés comme faisant partie du texte. Ils servent uniquement de séparateurs. Puisqu'ils séparent les mots en différents arguments, notre exemple de ligne de commande contient une commande suivie de quatre arguments distincts. Si nous ajoutons des guillemets :


[moi@linuxbox ~]$ echo "c'est un

tester"

[moi@linuxbox ~]$ echo "c'est un


c'est un test

c'est un test


image

le fractionnement de mots est supprimé et les espaces intégrés ne sont pas traités comme des délimiteurs, mais font plutôt partie de l'argument. Une fois les guillemets doubles ajoutés, notre ligne de commande contient une commande suivie d'un seul argument.

Le fait que les sauts de ligne soient considérés comme des délimiteurs par le mécanisme de séparation de mots provoque un effet intéressant, quoique subtil, sur la substitution de commandes. Considérer ce qui suit:


image

[moi@linuxbox ~]$ écho $(cal)

Février 2016 Di Lu Ma Me Je Ve Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

[moi@linuxbox ~]$ echo "$(cal)"

Février 2016


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


Dans le premier cas, la substitution de commande sans guillemets résultait en une ligne de commande contenant 38 arguments. Dans le second, une ligne de commande avec un argument qui inclut les espaces et les retours à la ligne intégrés.


Meilleur système d'exploitation Cloud Computing chez OnWorks :