80 votes

Comment échapper à un guillemet simple dans une chaîne de guillemets simples dans Bash?

Je veux afficher une chaîne dans Bash comme celle-ci

 I'm a student

bien sur tu peux faire comme ça

 echo "I'm a student"

Mais comment y parvenir en utilisant des guillemets simples autour de la chaîne ?

152voto

codaddict Points 154968
echo 'I\'m a student'

ne marche pas. Mais les travaux suivants :

 echo $'I\'m a student'

Depuis la page de manuel de bash :

Un guillemet simple ne peut pas apparaître entre des guillemets simples, même lorsqu'il est précédé par une barre oblique inverse. .... Les mots de la forme $'string' sont traités spécialement. Le mot se développe en chaîne, les caractères d'échappement avec barre oblique inverse étant remplacés par spécifié par la norme ANSI C.

70voto

Luke Gedeon Points 742

La solution "laide" mentionnée par Glenn Jackman devrait en fait être répertoriée comme une réponse de haut niveau. Cela fonctionne bien et est en fait magnifique dans certaines situations.

 'I'"'"'m a student'

Cela termine la chaîne entre guillemets simples après I puis démarre immédiatement une chaîne entre guillemets doubles contenant un guillemet simple, puis démarre une autre chaîne entre guillemets simples. Bash concatène ensuite toutes les chaînes contiguës en une seule.

Beau!

25voto

Nick Jensen Points 251

L'exemple ci-dessous fonctionne car le guillemet simple échappé \' est techniquement entre deux arguments entre guillemets simples

 echo 'I'\''m a student'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X