shell - < 生成子 shell 时的文档在哪里

标签 shell unix pipe spawn subshell

显然 < 和 |行为相似。

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/

相关文章:

linux - 将 nl 命令中的行增量设置为 float

linux - 删除第 1 列和第 2 列中具有相同字符串的行

php - 如何在双环境中打印当前工作目录的php版本

linux - Cron:从 shell 脚本设置 PATH 不起作用

python - 在 Linux 上重定向 `stdin`?还是我做错了?

c 管道、stdin/stdout 和排序

c - 列出文件的硬链接(hard link) C

python - 相当于 python 3 中的 find coreutil 命令递归返回目录结构中的所有文件和文件夹?

unix - 如何使用 vi 编辑器在 KornShell 命令行自动完成

c - 提示如何早于 popen 调用的标准输出出现?