shell 展开之进程替换# 深度解析 管道符|和输入输出<< >>重定向的区别

发布时间 2023-11-21 14:27:55作者: 学不会xuebuhui

参考链接

https://blog.csdn.net/zwlove5280/article/details/113609342

shell 展开中的进程替换可以说是非常难懂的一部分,它的语法为有两种

>(list)  ##接受输入 看作一个整体,相当于文件描述

<(list)  #接受输出

在 << The Linux Command Line>> 一书中提到了这样一个事,代码如下

echo david | read user
echo $user # 输出结果为空

通过管道把echo的输出作为read命令的输入,然后输入保存到user变量中,但是输出user变量的结果却为空。这是因为管道后的命令是在子shell中执行的,因此当子shell执行完毕后,回到当前shell时,user变量是不可见的。

解决办法,使用输入重定向

read user <<< "david"
echo $user

image

总结

不管是>(list)语法,还是<(list)语法,其实我们就把它当作一个文件,这个文件包含list中的所有命令,并且这个文件是打开的,文件描述符为 /dev/fd/63。