#1 Le 12/02/2011, à 21:38
- xSonnyx
[Résolu] Début dans bash. problème d'apostrophe et d'antislash
Bonjour à toutes et tous !
Je commence à apprendre les scripts bash mais me voilà déjà confronté à un premier problème :
dans le tuto du site du zéro que je lis il est écrit :
Si vous voulez insérer une apostrophe dans la valeur de la variable, il faut la faire précéder d'un antislash \. En effet, comme les apostrophes servent à délimiter le contenu, on est obligé d'utiliser un caractère d'échappement (comme on les appelle) pour pouvoir vraiment insérer une apostrophe.
Cependant lorsque j'écrit :
message='Bonjour tout le monde. C\'est moi!'
l'antislash ne fonctionne pas, l'apostrophe de "c'est" est pris pour celle mettant fin à la valeur de la variable message. Je le vois à la coloration syntaxique, ainsi qu'au message d'erreur lorsque j'essaye d'exécuter le script.
Pourquoi ?
Bonne soirée à vous en tout cas.
Dernière modification par herberts (Le 15/02/2011, à 01:58)
Hors ligne
#2 Le 12/02/2011, à 22:18
- expmux
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
c'est quoi cette double cote avant 'message=' ? tu veux faire quoi au juste ?
message="Bonjour tout le monde. C'est moi!"
echo $message
la différence avec ' c'est qu'avec " le shell interpréte les variables
par ex echo '$message' affichera $message
EDIT : c'est vrai que ca ne marche pas a cause du point d'exclamation
ma solution (si il y en a d'autres je suis preneur !
aze='!'
message="Bonjour tout le monde. C'est moi$aze"
echo $message
Dernière modification par expmux (Le 12/02/2011, à 22:26)
Bande de nazes !
http://wordpress.canardage.free.fr/analyse/
Hors ligne
#3 Le 12/02/2011, à 22:39
- xSonnyx
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
Désolé pour le double quote avant message c'était une erreur de ma part, j'ai modifié cela.
En fait ce que je voudrai c'est faire apparaitre l'apostrophe dans la variable "message", l'apostrophe de "c'est moi!".
Car si la valeur de la variable est donné avec des simple quote le shell pense que l'apostrophe met fin à la valeur. D'où l'antislash, mais qui ne fonctionne pas.
En revanche je viens d'essayer avec les doubles quotes. Évidemment l'apostrophe fonctionne, j'ai donc essayer d'insérer des guillemets dans la valeur de ma variable, précédé d'un antislash et là cela fonctionne.
Etrange, pourquoi cela fonctionne avec les guillemets mais non avec les apostrophes?
Hors ligne
#4 Le 13/02/2011, à 14:22
- expmux
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
je pense que c'est parce que " est un caractère qui sert aux regexp alors que ' ne l'ai pas. Du coup \' n'a pas de sens, ni \! . Mais comme ! est une instruction du shell, il l'interprète...sauf si tu le mets entre apostrophes.
message='Salut !' fonctionne
message='C'est moi' ne fonctionne pas et a part mettre des guillemets je ne sais pas comment faire pour remplacer le deuxième apostrophe (mais ca doit forcément exister)
message="c'est moi !" ne fonctionne pas a cause du ! qui est interprété. La solution que je t'ai proposée fonctionne (post #2)
Bande de nazes !
http://wordpress.canardage.free.fr/analyse/
Hors ligne
#5 Le 13/02/2011, à 16:08
- Bousky
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
message='Bonjour tout le monde. C\'est moi!'
Il y a deux problèmes dans ta ligne :
- les chaines entre guillemets simples ne considèrent pas \ comme un caractère d'échappement, donc pour bash la chaine est « … monde. C\ » (à laquelle il concatène « est »)
→ Il faut donc utiliser des guillemets doubles si tu veux mettre des guillemets simples / apostrophes dans ta chaine
- « ! » doit être échappé dans les chaines de caractères
Tu a donc plusieurs solutions :
message="Bonjour tout le monde. C\'est moi \!"
message="Bonjour tout le monde. C\'est moi "!
message='Bonjour tout le monde. '"C\'est moi "!
(La concaténation en bash se fait par simple juxtaposition, donc tu peux découper ta chaine en plusieurs morceaux utilisants des guillemets différents.)
message=Bonjour\ tout\ le\ monde.\ C\'est\ moi\ !
…
PS : en français, on met un espace avant les ponctuations à deux nivaux (;:!?) contrairement à l'anglais
Dernière modification par Bousky (Le 13/02/2011, à 16:10)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#6 Le 14/02/2011, à 17:05
- xSonnyx
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
Merci pour vos réponses !
Hors ligne
#7 Le 15/02/2011, à 01:14
- YannUbuntu
Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash
Salut. Peux-tu modifier ton 1er message afin d'ajouter [Resolu] dans le titre stp ?
à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison
Hors ligne