捕获命令的输出而无需将“ \ n”转换为文字换行符

时间:2019-02-10 02:58:10

标签: bash shell

cat file.json给了我我想在$JSON中捕捉的东西:

{ 
  key: "value\nwith\nnewline\nchars"
}

尽管我不能做JSON=$(cat file.json),因为这样会翻译换行符,并且在echo $JSONecho -e $JSON之后得到。

{
 key: "value
with
newline
chars"
}.

如何在$JSON内保留换行符?

1 个答案:

答案 0 :(得分:3)

使用命令替换捕获不会执行您担心的翻译,而是使用echo(或通过替换为格式字符串而不是单独的参数来误用printf


要发出完整反斜杠序列的变量,请使用:

printf '%s\n' "$JSON"

这避免了echo可能具有的行为(显式使用bash对echo -e的不兼容扩展名,或者隐式地在bash中启用xpg_echo标志时,或者默认为的行为与其他POSIX + XSI兼容的/bin/sh实现方式相同,其中转义序列被echo取代,即使作为参数传递的变量具有多字符反斜杠序列。