bash printf反斜杠然后换行

时间:2013-08-07 21:08:48

标签: linux bash

我正在尝试将bash创建为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

结果将是

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

当我改变时 FORMAT="%-4s %-32s \\ \n"

我得到了

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

并且gcc开始抱怨\

之后的额外空格

如果没有空格,\\似乎会被解释多次。

不使用 FORMAT="%-4s %-32s \\"

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

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

有没有更好的方法来处理这个问题?

2 个答案:

答案 0 :(得分:1)

使用十六进制转义序列:

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

答案 1 :(得分:0)

shell以不同的方式处理双引号和单引号。

Don在这里使用双引号:

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

使用这样的单引号并避免转义:

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

OR用于打印文字反斜杠和换行符:

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