cat file.json
给了我我想在$JSON
中捕捉的东西:
{
key: "value\nwith\nnewline\nchars"
}
尽管我不能做JSON=$(cat file.json)
,因为这样会翻译换行符,并且在echo $JSON
或echo -e $JSON
之后得到。
{
key: "value
with
newline
chars"
}.
如何在$JSON
内保留换行符?
答案 0 :(得分:3)
使用命令替换捕获不会执行您担心的翻译,而是使用echo
(或通过替换为格式字符串而不是单独的参数来误用printf
)将。
要发出完整反斜杠序列的变量,请使用:
printf '%s\n' "$JSON"
这避免了echo
可能具有的行为(显式使用bash对echo -e
的不兼容扩展名,或者隐式地在bash中启用xpg_echo
标志时,或者默认为的行为与其他POSIX + XSI兼容的/bin/sh
实现方式相同,其中转义序列被echo
取代,即使作为参数传递的变量具有多字符反斜杠序列。