5

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

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

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

4

2 回答 2

8

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

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

于 2012-08-23T14:49:04.190 回答
4

此处使用括号是一种“分组构造”——详见bash 参考手册

类似的构造使用大括号:

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

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

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

于 2012-08-23T16:21:14.250 回答