2 bash special-characters quoting
我有以下 bash 字符串,我需要在“Hello”字符串之前为其添加换行符:
bash -c "echo 'Hello' > /location/file"
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用不同的\n
语法变体添加它;在双引号之前,在双引号的范围内,并有不同的转义变体。
如何在“Hello”字符串之前添加换行符,使其出现在第二行?
这里有(至少)三个选项。
bash -c "echo '
Hello' > /location/file"
Run Code Online (Sandbox Code Playgroud)
printf
(或非标准echo -e
),它将反斜杠转义字符扩展为命令本身的一部分(两者都是 shell 内置命令):bash -c "printf '\n%s\n' Hello > /location/file"
Run Code Online (Sandbox Code Playgroud)
$'
引用,它将反斜杠转义字符扩展为 shell 的一部分:bash -c "echo $'\nHello' > /location/file
Run Code Online (Sandbox Code Playgroud)
您可以使用$'\n'
:
$ bash -c "echo $'\nHello'" >somefile
Run Code Online (Sandbox Code Playgroud)
Bash 手册提到了这一点:
表格
$'string'
中的词被特殊处理。单词扩展为字符串,并按照 ANSI C 标准的规定替换反斜杠转义字符。反斜杠转义序列(如果存在)按如下方式解码:
(标准转义序列表被省略)