如何从命令行创建多行文件?

Nov*_*ser 13 echo escape-characters

如何在文件中输入以下内容:

Hi
abcd
Run Code Online (Sandbox Code Playgroud)

我尝试使用echo "Hi\nabcd" >> ab.txt,但在文件中它按原样编写(\n包括在内,而不是换行符)

Ign*_*ams 16

你需要告诉echo尊重转义序列。

echo -e "Hi\nabcd" >> ab.txt
Run Code Online (Sandbox Code Playgroud)


eph*_*ent 13

的行为echo因壳而异¹;printf的行为比较规范。

printf "Hi\nabcd" >> ab.txt
Run Code Online (Sandbox Code Playgroud)

¹“除非-n(作为第一个参数)和转义序列都被省略,否则不可能在所有 POSIX 系统中便携地使用echo。”


msc*_*woj 7

我建议使用名为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)


psu*_*usi 6

您也可以只执行cat > file,然后在完成后键入并按 Ctrl-D。


Bru*_*ger 5

您还可以通过引用来玩游戏:

 % echo 'Hi
> abcd' >> ab.txt
Run Code Online (Sandbox Code Playgroud)

您可以通过在“Hi”后按“Enter”在 bash 中输入该内容。Bash 使用“>”作为我的命令提示符的延续。由于某种原因,我无法使用反斜杠来逃避个人回报。