将bash中变量中的多行字符串转换为带有换行符转义的单行字符串

Ste*_*kov 4 bash

我正在寻找一种方法,将 bash 变量中的多行字符串转换为单行字符串,其中每个\n字符都转义为\n文字。

例如:

str="
Hello
World
"
Run Code Online (Sandbox Code Playgroud)

我需要这个才能成为Hello\nWorld。我浏览了 SO 和 Unix StackExchange 上的问题,但我还没有找到可以实现我需要的命令。

Joh*_*ica 8

Bash 有两种内置方法来引用适合重新摄取的值。这些不仅可以处理换行符,还可以处理制表符、引号和反斜杠:

\n
\xe2\x9d\xaf echo "${str@Q}"\n$'\\nHello\\nWorld\\n'\n
Run Code Online (Sandbox Code Playgroud)\n
\xe2\x9d\xaf printf '%q\\n' "$str"\n$'\\nHello\\nWorld\\n'\n
Run Code Online (Sandbox Code Playgroud)\n

或者,如果您只想替换换行符而不做其他事情,您可以使用${var//search/replace}语法来进行替换:

\n
\xe2\x9d\xaf echo "${str//$'\\n'/\\\\n}"\n\\nHello\\nWorld\\n\n
Run Code Online (Sandbox Code Playgroud)\n