显然 < 和 |行为相似。
cat file | wc
wc < file
这样使用时,这个“<”符号是否有一个名称,以便人们可以找到它的文档?
man <
man '<'
不要透露任何东西;在网络搜索中,这个符号是有歧义的,因为它在数学上被用作电子邮件中的行前缀。同样,
if [ -r file ]
构造可以重述为
if test -r file
然后可以找到“测试”实用程序的手册页。 (尝试在方括号中搜索文档!)我应该搜索什么名称或字符串来查找有关“<”行为的文档?还有'<<'?
最佳答案
显然 < 和 |行为相似
有一些轻微的相似之处,但你不能太过分了。它们都代表重定向。
<
重定向左侧命令的标准输入流 ( stdin
) 以引用右侧的文件。只有当它是一个外部程序(如 wc
)时,该命令才会在它自己的进程中运行。
|
将左侧命令的标准输出流 ( stdout
) 重定向到右侧命令的标准输入流 ( stdin
)。使用的机制称为匿名管道,并且这两个命令都在它们自己的子进程中运行。
<
和 |
不是命令,它们是 shell 语法的一部分,所以不会有任何 man
他们的页面。作为 bash
的一部分你必须使用的语言 man bash
然后搜索 REDIRECTION
(对于 <
)或 Pipelines
(对于 |
)。
第 1 节 man
页面用于程序,而不是一种特定的语言,如 shell,第 2 节用于从 C 调用的内核 API,等等。所以不要指望特定 shell 的详细信息会出现在单独的手册页中。所以有一个 man bash
, man sh
, man csh
, man zsh
等
令人惊讶的是,[
是一个内置的 shell:
$ type [
[ is a shell builtin
也称为 test
.但是:
$ type [[
[[ is a shell keyword
[
, test
, [[
都是命令,附加文档可在bash
中找到使用 help
,例如
$ help [
那么你怎么知道这个符号是命令还是语法的一部分呢?通过学习语言,别无他法。按照教程,阅读 man bash
,查看示例,但最重要的是自己进行实验并尝试一下。
这对初学者来说并不容易,但你应该记住,shell 语法是为程序员编写的,以便使用和理解,它从来不是为最终用户设计的。
您评论(提示?)相同的字符用于不同的含义。这在编程语言中很常见。例如,在 C *
用于限定指针的声明,作为乘法二元运算符,作为半个注释符号,以及作为取消引用指针的一元运算符。各种语言中还有许多其他多用途字符。这部分是因为早期的键盘只能使用 128 个字符的 ASCII 集的可打印部分。使用 Unicode 运算符(例如 Perl 6)的尝试尚未被广泛采用。
关于shell - < 生成子 shell 时的文档在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783911/