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

时间:2012-08-23 14:44:22

标签: bash shell unix

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

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

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

2 个答案:

答案 0 :(得分:8)

-通常可用于在接受文件名参数的命令行选项中表示stdin。请注意,cat -的效果与普通cat相同,即无论如何这两个版本都为stdin

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

答案 1 :(得分:3)

这里使用括号是“分组构造” - 请参阅bash reference manual

中的详细信息

类似的构造使用大括号:

{ echo "this is a header"; cat -; }

这是不同的语法,需要在大括号和尾部分号周围添加空格。

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