我刚在一个网站上看到了一个示例,该示例将awk命令的输出导入到以下命令中:
(echo "this is a header";cat -)
这实际上是在输出顶部添加了标题字符串。看起来像是“-”代表标准输出。但是这个结构是什么?带括号,然后是cat -?这是如何工作的,这似乎非常有用,但这是我第一次看到它。
-
通常用于表示命令行选项中的stdin
,该选项接受文件名参数。请注意,cat -
的效果与普通的cat
相同,即两个版本都会读取stdin
。
括号会导致shell在子shell中运行命令。如果shell是bash
,那么(...)
本质上就是bash -c '...'
。这样做是因为在xyz | echo“…”; cat
中,xyz
的输出将被传送到echo
并且会丢失。
{ echo "this is a header"; cat -; }
这是一种不同的语法,需要在大括号和分号后面加上空格。
使用大括号和括号的区别在于:用大括号包含的命令列表在当前shell中运行,而用括号包含的命令列表在子shell中运行。如果你想让命令列表改变你的环境,这一点非常重要 -- 当子shell退出时,环境更改将会丢失。