如何使用Bash命令在标准输出前加上头文件?

5

我刚在一个网站上看到了一个示例,该示例将awk命令的输出导入到以下命令中:

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

这实际上是在输出顶部添加了标题字符串。看起来像是“-”代表标准输出。但是这个结构是什么?带括号,然后是cat -?这是如何工作的,这似乎非常有用,但这是我第一次看到它。


1
在“cat”后面不需要加“-”。 - kev
2个回答

8

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

括号会导致shell在子shell中运行命令。如果shell是bash,那么(...)本质上就是bash -c '...'。这样做是因为在xyz | echo“…”; cat中,xyz的输出将被传送到echo并且会丢失。


4
这里使用括号是一种“分组结构”——详见Bash参考手册。类似的结构可以使用花括号:
{ echo "this is a header"; cat -; }

这是一种不同的语法,需要在大括号和分号后面加上空格。

使用大括号和括号的区别在于:用大括号包含的命令列表在当前shell中运行,而用括号包含的命令列表在子shell中运行。如果你想让命令列表改变你的环境,这一点非常重要 -- 当子shell退出时,环境更改将会丢失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接