3 votes

bash printf backslash puis nouvelle ligne

J'essaie de créer ceci à partir de bash dans un en-tête c

#define XXXXX \

 "id title\n" \ 

 "1  developer\n" \

the script is 

FORMAT="  \"%-4s  %-32s\\\n"

printf "$FORMAT" "id" "title\\n\"" >> $FILE

printf "$FORMAT" "1" "Developer\\n\"" >> $FILE

le résultat serait

"id    title\n"                        \n  "1     Developer\n"                              \n

quand je change FORMAT="%-4s %-32s \\ \n"

Je reçois

"id    title\n"                           \ 
"1     Developer\n"                       \ 

et gcc commence à se plaindre de l'espace supplémentaire après \

Il semble que le \\ serait interprété plus d'une fois s'il n'y a pas d'espace.

sans utiliser FORMAT="%-4s %-32s \\"

printf "$FORMAT" "id" "title\\n\"" >> $FILE

printf "\n" >> $FILE
...

Y a-t-il une meilleure façon de gérer cela ?

3voto

Walker Mills Points 46

Utilisez des séquences d'échappement hexadécimales :

FORMAT="%-4s %-32s \x5C\n"

0voto

anubhava Points 172509

Le shell traite différemment les guillemets doubles et les guillemets simples.

N'utilisez pas de guillemets ici :

FORMAT="%-4s %-32s \\n"

Utilisez le guillemet simple comme ceci et évitez les échappatoires :

FORMAT='%-4s %-32s \n'

OR pour l'impression de la barre oblique inversée et de la nouvelle ligne :

FORMAT='%-4s %-32s \\\n'

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