Elm*_*der 8 bash io-redirection
据我了解 bash 文档 和 < 重定向标准输入。所以,cmd | foo
和foo < <(cmd)
应该或多或少是等价的。但是,对于 bash 内部读取命令,情况似乎并非如此。例如,如果我输入
a=""; b=""; read a b < <(echo a b); echo $a $b
Run Code Online (Sandbox Code Playgroud)
它打印出来a b
,而
a=""; b=""; echo a b | read a b; echo $a $b
Run Code Online (Sandbox Code Playgroud)
什么都不打印。另一方面,如果我输入
a=""; b=""; cat < <(echo a b) >foo1
a=""; b=""; echo a b | cat > foo2
Run Code Online (Sandbox Code Playgroud)
文件 foo1 和 foo2 完全相同。所以我的问题是:当涉及(或一般)读取命令时,这两种形式有什么区别?他们应该看到完全相同的重定向输入。虽然< <(...)
表单有效,但我发现它非常难以理解,并且更喜欢使用管道表单。
Chr*_*own 10
流水线操作read
在子 shell 中执行,而进程替换则不然。对于大多数用例,这不是问题,但在这种情况下,您希望直接影响 shell(通过操作变量)。因为read
已经在子shell中被调用,所以只有子shell受到影响。因此,您可能希望对它们执行的任何操作也需要在子 shell 中执行;例如:
echo a b | { read a b ; echo "$a" "$b" ; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9288 次 |
最近记录: |