命令分组和流水线有什么区别?

0 pipe

我无法理解命令分组和流水线之间的区别

Prv*_*dav 5

它们之间的区别是:

( foo; bar; )
Run Code Online (Sandbox Code Playgroud)

它将执行 a 中的命令subshell,因此如果您在子外壳中进行任何更改,它们将不会出现在subshell. 喜欢

i=2; ( ((i++)); echo $i ); echo $i
Run Code Online (Sandbox Code Playgroud)

你会得到输出:

3
2
Run Code Online (Sandbox Code Playgroud)

如果你在里面做同样的事情,{ }那么它会在同一个环境中执行,所以变化很重要。喜欢

i=2; { ((i++)); echo $i; }; echo $i
Run Code Online (Sandbox Code Playgroud)

会给:

3
3
Run Code Online (Sandbox Code Playgroud)

现在让我们来看看流水线,流水线用于获取输入并为一些命令提供输出。所以命令:

a | b
Run Code Online (Sandbox Code Playgroud)

command 的输出a将作为 command 的输入b

echo "hi" | cat
Run Code Online (Sandbox Code Playgroud)

会给你输出hi。所以echo "hi"ie 的输出hi将是cat命令的输入。