cat
这里是覆盖原有内容。只能看到最后一页。注意行号显示命令。
在Linux shell脚本和命令行中,<
和 >>
是重定向操作符,它们用于控制输入输出流的方向。尽管它们都涉及文件和数据流,但它们的功能和用途是不同的。
<
<
操作符用于重定向标准输入(stdin)。当你使用 <
时,你实际上是在告诉 shell 从指定的文件读取输入,而不是从键盘(默认的标准输入)。例如:
1cat < myfile.txt
这条命令会读取myfile.txt
的内容,并将其传递给cat
命令处理,而不是等待用户从键盘输入。
>>
>>
操作符用于追加重定向标准输出(stdout)。当你使用 >>
时,你是在告诉 shell 将命令的输出附加到指定的文件末尾,而不是覆盖文件内容或输出到终端。例如:
1echo "Hello, world!" >> myfile.txt
这条命令会在myfile.txt
文件的末尾追加一行文本 "Hello, world!"
。如果myfile.txt
文件不存在,它会被创建。如果文件已存在,文本将被添加到文件的末尾,不会删除现有的内容。
<<
是一种称为“here document”(这里文档)或“heredoc”的特殊重定向操作符,在Shell脚本中非常有用。它允许你定义一段文本或一系列命令,然后将这段文本作为命令的标准输入。这种用法常见于需要大量文本输入或复杂格式输入的场景,比如发送电子邮件、生成配置文件等。
<<
的基本语法如下:
1command << delimiter
2 # 这里可以写入任意多行文本或命令输入
3 # 所有内容直到遇到 'delimiter' 行才会停止读取
4 # 注意,delimiter 行本身不会作为输入的一部分
例如,如果你想使用cat
命令打印一大段文本,你可以这样做:
1cat << EOF
2这是第一行文本。
3这是第二行文本。
4这是第三行文本。
5EOF
在这个例子中,EOF
是分隔符,你可以在任何地方选择任何未在文本中出现的字符串作为分隔符。所有从 << EOF
下一行开始直到 EOF
出现的文本都会被当作 cat
命令的输入。
here document
对于编写脚本时需要插入多行文本或配置是非常方便的,因为它允许你在脚本中直接嵌入这些内容,而不需要使用外部文件。
1#!/bin/bash
2my_var="Hello, World!"
3echo << EOF
4This is a line.
5And this is another line with a variable: $my_var
6EOF
以上脚本会正确地将 $my_var
替换为其值,输出包含变量值的文本。这是 here document
的另一个强大特性。
总结:
-
>
(简单重定向)- 功能:改变命令的输出方向,将命令的输出重定向到指定的文件中。
- 特性:如果目标文件已存在,其内容将被覆盖;如果文件不存在,则会创建新文件。
-
>>
(追加重定向)- 功能:与
>
类似,但不会覆盖文件内容。 - 特性:如果目标文件已存在,命令的输出将被追加到文件的末尾;如果文件不存在,则会创建新文件。
- 功能:与
-
<
(输入重定向)- 功能:改变命令的输入来源,使命令从指定的文件读取输入,而不是从标准输入(通常为键盘)读取。
- 特性:适用于需要文件内容作为输入的命令。
-
<<
(Here Document)- 功能:允许在脚本中直接定义一段文本或多行输入,作为命令的输入。
- 特性:使用分隔符(delimiter)来界定文本的开始和结束,适合构造多行文本或复杂格式的输入。