它们之间的区别是:
( 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命令的输入。