Abd*_*red 56 command-line shell echo newlines
我想使用 echo 命令和重定向运算符创建一个文件,该文件应该由几行组成。
我试图通过“\n”在字符串中包含一个换行符:
echo "first line\nsecond line\nthirdline\n" > foo
Run Code Online (Sandbox Code Playgroud)
但是这样不会创建三行文件,而是创建一个只有一行和字符串的逐字内容的文件。
如何仅使用此命令创建多行文件?
Jan*_*nis 62
您要求在echo命令中使用一些语法:
echo $'first line\nsecond line\nthirdline' > foo
Run Code Online (Sandbox Code Playgroud)
(但也要考虑你得到的另一个答案。)
该$'...'构造扩展了嵌入的 ANSI 转义序列。
Chr*_*own 49
echo 对字符转义的作用是实现定义的。在 echo 的许多实现中(包括大多数现代实现),默认情况下根本不检查传递的字符串是否有转义。
使用 GNU bash 提供的 echo(作为内置)和其他一些 echo 变体,您可以执行以下操作:
echo -en 'first line\nsecond line\nthird line\n' > file
Run Code Online (Sandbox Code Playgroud)
然而,这听起来真的很像你想要的printf,这对我来说更清晰,也更便携(它具有由 POSIX 定义的此功能):
printf '%s\n' 'first line' 'second line' 'third line' > file
Run Code Online (Sandbox Code Playgroud)
您也可以考虑使用此处的文档:
cat > file << 'EOF'
first line
second line
third line
EOF
Run Code Online (Sandbox Code Playgroud)
以下是使用该echo命令创建多行文件的其他一些方法:
echo "first line" > foo
echo "second line" >> foo
echo "third line" >> foo
Run Code Online (Sandbox Code Playgroud)
其中第二个和第三个命令使用>>重定向运算符,这会导致命令的输出附加(添加)到文件(此时应该已经存在)。
或者
(echo "first line"; echo "second line"; echo "third line") > foo
Run Code Online (Sandbox Code Playgroud)
其中括号将echo命令分组到一个子进程中,该子进程的外观和行为类似于任何输出多行的单个程序(ls例如 )。
上面的一个微妙的变化是
{ echo "first line"; echo "second line"; echo "third line";} > foo
Run Code Online (Sandbox Code Playgroud)
这是稍微比它不创建子进程的第二个答案更为有效。但是,语法稍微有点棘手:请注意,在 之后必须有一个空格,在{之前必须有一个分号}。
请参阅shell 的控制和重定向运算符是什么?想要查询更多的信息。
| 归档时间: |
|
| 查看次数: |
149451 次 |
| 最近记录: |