是否使用bash命令将头作为stdout的前缀?

是否使用bash命令将头作为stdout的前缀?,bash,shell,unix,Bash,Shell,Unix,我刚才在一个站点上看到了一个示例,它通过管道将awk命令的输出传输到以下命令: (echo "this is a header";cat -) 这有效地将头字符串添加到了输出的顶部。它看起来像-在那里表示标准输出。这个构造是什么?带括号,然后是cat-?这是如何工作的,这似乎很有用,但这是我第一次看到它。-通常可以用来表示接受文件名参数的命令行选项中的stdin。请注意,cat-的效果与普通cat的效果相同,即两个版本都读取stdin 圆括号使shell以一种方式运行命令(…)本质上就是bas

我刚才在一个站点上看到了一个示例,它通过管道将awk命令的输出传输到以下命令:

(echo "this is a header";cat -)

这有效地将头字符串添加到了输出的顶部。它看起来像-在那里表示标准输出。这个构造是什么?带括号,然后是cat-?这是如何工作的,这似乎很有用,但这是我第一次看到它。

-
通常可以用来表示接受文件名参数的命令行选项中的
stdin
。请注意,
cat-
的效果与普通
cat
的效果相同,即两个版本都读取
stdin


圆括号使shell以一种方式运行命令<如果shell是
bash
,那么code>(…)本质上就是
bash-c'…'
。之所以这样做是因为在
xyz | echo“…”;cat
xyz的输出将通过管道传输到
echo
并丢失。

此处使用括号是一种“分组结构”——请参阅

类似的构造使用大括号:

{ echo "this is a header"; cat -; }
这是不同的语法,需要大括号和尾随分号周围有空格


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

-
不需要在
cat
之后进行更改。