我刚刚在一个站点上看到了一个示例,该示例将 awk 命令的输出通过管道传输到以下命令:
(echo "this is a header";cat -)
这有效地在输出顶部添加了标题字符串。看起来 - 代表那里的标准输出。这个构造是什么?带括号,然后是 cat -? 这是如何工作的,这似乎很有用,但这是我第一次看到它..
-
通常可用于表示stdin
接受文件名参数的命令行选项。请注意, 的效果cat -
与 plain 相同cat
,即两个版本都可以读取stdin
。
括号使 shell 在sub-shell中运行命令。(...)
本质上是bash -c '...'
如果外壳是bash
. 这样做是因为在xyz | echo "..."; cat
输出中xyz
会被输入echo
并丢失。
此处使用括号是一种“分组构造”——详见bash 参考手册
类似的构造使用大括号:
{ echo "this is a header"; cat -; }
这是不同的语法,需要大括号和尾随分号周围的空格。
使用大括号和括号的区别在于:大括号中的命令列表在您当前的 shell 中运行,括号中的命令列表在子shell中运行。如果您希望命令列表更改您的环境,这一点很重要——当子shell 退出时,环境更改将丢失。