我刚看到一个网站上的示例,它将awk命令的输出传送到以下命令:
(echo "this is a header";cat -)
这有效地在输出的顶部添加了标题字符串..似乎 - 代表stdout。虽然这个结构是什么?括号,然后猫 - ?这是如何工作的,这似乎非常有用,但这是我第一次看到它..
答案 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退出时,环境更改将会丢失。