Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/02/2011, à 22: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 ? sad

Bonne soirée à vous en tout cas.

Dernière modification par herberts (Le 15/02/2011, à 02:58)

Hors ligne

#2 Le 12/02/2011, à 23: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, à 23:26)

Hors ligne

#3 Le 12/02/2011, à 23: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, à 15: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)

Hors ligne

#5 Le 13/02/2011, à 17:08

Bousky

Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash

xSonnyx a écrit :

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, à 17: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, à 18:05

xSonnyx

Re : [Résolu] Début dans bash. problème d'apostrophe et d'antislash

Merci pour vos réponses ! smile

Hors ligne

#7 Le 15/02/2011, à 02: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