如何在bash字符串中添加换行符?

2 bash special-characters quoting

我有以下 bash 字符串,我需要在“Hello”字符串之前为其添加换行符:

bash -c "echo 'Hello' > /location/file"
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用不同的\n语法变体添加它;在双引号之前,在双引号的范围内,并有不同的转义变体。

如何在“Hello”字符串之前添加换行符,使其出现在第二行?

Chr*_*own 6

这里有(至少)三个选项。

  1. 使用文字换行符:
bash -c "echo '
Hello' > /location/file"
Run Code Online (Sandbox Code Playgroud)
  1. 使用printf(或非标准echo -e),它将反斜杠转义字符扩展为命令本身的一部分(两者都是 shell 内置命令):
bash -c "printf '\n%s\n' Hello > /location/file"
Run Code Online (Sandbox Code Playgroud)
  1. 使用 bash 的非标准$'引用,它将反斜杠转义字符扩展为 shell 的一部分:
bash -c "echo $'\nHello' > /location/file
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

您可以使用$'\n'

$ bash -c "echo $'\nHello'" >somefile
Run Code Online (Sandbox Code Playgroud)

Bash 手册提到了这一点:

表格$'string'中的词被特殊处理。单词扩展为字符串,并按照 ANSI C 标准的规定替换反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:

(标准转义序列表被省略)