是否使用bash命令将头作为stdout的前缀?
我刚才在一个站点上看到了一个示例,它通过管道将awk命令的输出传输到以下命令:是否使用bash命令将头作为stdout的前缀?,bash,shell,unix,Bash,Shell,Unix,我刚才在一个站点上看到了一个示例,它通过管道将awk命令的输出传输到以下命令: (echo "this is a header";cat -) 这有效地将头字符串添加到了输出的顶部。它看起来像-在那里表示标准输出。这个构造是什么?带括号,然后是cat-?这是如何工作的,这似乎很有用,但这是我第一次看到它。-通常可以用来表示接受文件名参数的命令行选项中的stdin。请注意,cat-的效果与普通cat的效果相同,即两个版本都读取stdin 圆括号使shell以一种方式运行命令(…)本质上就是bas
(echo "this is a header";cat -)
这有效地将头字符串添加到了输出的顶部。它看起来像-在那里表示标准输出。这个构造是什么?带括号,然后是cat-?这是如何工作的,这似乎很有用,但这是我第一次看到它。
-
通常可以用来表示接受文件名参数的命令行选项中的stdin
。请注意,cat-
的效果与普通cat
的效果相同,即两个版本都读取stdin
圆括号使shell以一种方式运行命令<如果shell是
bash
,那么code>(…)本质上就是bash-c'…'
。之所以这样做是因为在xyz | echo“…”;cat
xyz的输出将通过管道传输到echo
并丢失。此处使用括号是一种“分组结构”——请参阅
类似的构造使用大括号:
{ echo "this is a header"; cat -; }
这是不同的语法,需要大括号和尾随分号周围有空格
使用大括号和括号的区别在于:大括号中的命令列表在当前shell中运行,括号中的命令列表在子shell中运行。如果您希望命令列表改变您的环境,这一点很重要——当子shell退出时,环境更改将丢失。
-
不需要在cat
之后进行更改。