使用bash命令将标头前缀添加到stdout?

Pal*_*han 4 unix bash shell

我刚看到一个站点上的示例,它将awk命令的输出传递给以下命令:

(echo "this is a header";cat -)
Run Code Online (Sandbox Code Playgroud)

这有效地将输出顶部的标题字符串添加到了..似乎 - 代表stdout.虽然这个结构是什么?括号,然后猫 - ?这是如何工作的,这似乎非常有用,但这是我第一次看到它..

Max*_*kin 8

-通常可用于表示stdin接受文件名参数的命令行选项.请注意,效果cat -与plain相同cat,即stdin无论如何都读取了两个版本.

括号使shell在 shell中运行命令.(...)基本上bash -c '...'如果壳是bash.这样做是因为xyz | echo "..."; cat输出xyz会被输入echo和丢失.


gle*_*man 4

这里括号的使用是“分组构造”——请参阅bash 参考手册中的详细信息

类似的构造使用大括号:

{ echo "this is a header"; cat -; }
Run Code Online (Sandbox Code Playgroud)

这是不同的语法,需要在大括号和尾随分号周围留有空格。

使用大括号和括号的区别是:大括号中的命令列表在当前shell 中运行,括号中的命令列表在子shell中运行。如果您希望命令列表改变您的环境,这一点很重要——当子 shell 退出时,环境更改将丢失。