Aly*_*Aly 3 bash redirect pipe subshell
我写了以下代码
var=0
cat $file | while read line do
var=$line
done
echo $var
Run Code Online (Sandbox Code Playgroud)
现在据我所知,管道(|)将导致创建一个子shell,因此第1行的变量var将在最后一行具有相同的值.
然而,这将解决它:
var=0
while read line do
var=$line
done < $file
echo $line
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么重定向不会导致子shell被创建,或者如果你喜欢为什么管道会导致创建一个子shell?
谢谢
Dav*_* W. 13
该cat命令是一个命令,这意味着它需要自己的进程并拥有自己的STDIN和STDOUT.您基本上采用cat命令生成的STDOUT 并将其重定向到while循环的过程中.
使用重定向时,您没有使用单独的进程.相反,您只是将while循环的STDIN从控制台重定向到文件的行.
不用说,第二种方式更有效率.在旧的Usenet日子之前,所有的小鞭子都抓住了我们的互联网(_Hey you kids!离开我的互联网!)并用你的花哨的图形和所有网页摧毁它,有些人用来给出无用的东西对于为comp.unix.shell小组做出贡献的人而言,他获得了Cat奖励,cat因为使用cat它几乎从来没有必要,而且效率通常更低.
如果您cat在代码中使用a ,则可能不需要它.该cat命令来自concatenate,并且假设仅用于将文件连接在一起.例如,当我们在800K软盘上使用SneakerNet时,我们必须使用Unix split命令拆分长文件,然后使用cat它们将它们合并在一起.
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |