Nov*_*ser 13 echo escape-characters
如何在文件中输入以下内容:
Hi
abcd
Run Code Online (Sandbox Code Playgroud)
我尝试使用echo "Hi\nabcd" >> ab.txt
,但在文件中它按原样编写(\n
包括在内,而不是换行符)
eph*_*ent 13
printf "Hi\nabcd" >> ab.txt
Run Code Online (Sandbox Code Playgroud)
¹“除非-n(作为第一个参数)和转义序列都被省略,否则不可能在所有 POSIX 系统中便携地使用echo。”
我建议使用名为Here Document 的bash shell 功能。似乎是实现您所描述的最优雅的形式。最重要的是,多行内容看起来与输出文件中的内容完全相同(而不是不可读的、长的、\n
分隔的字符串)。
cat > ab.txt <<EOL
Hi
abcd
EOL
Run Code Online (Sandbox Code Playgroud)
在EOL
这里,它告诉shell应该找什么找结束标记此文件。您可以任意选择一个单词,让您选择不会与此处文档内容本身发生冲突的内容。好消息是你可以用 shell${VARIABLES}
来替换。如果这是不想要的,您总是可以用引号 ( '
)将开头(仅开头一个!)标记词包裹起来以防止它。
我个人在 init 脚本中经常使用它来在设置我的环境时创建小的配置文件,例如:
cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER
Run Code Online (Sandbox Code Playgroud)
您还可以通过引用来玩游戏:
% echo 'Hi
> abcd' >> ab.txt
Run Code Online (Sandbox Code Playgroud)
您可以通过在“Hi”后按“Enter”在 bash 中输入该内容。Bash 使用“>”作为我的命令提示符的延续。由于某种原因,我无法使用反斜杠来逃避个人回报。