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

参考链接

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

其实也可以通过进程替换来解决管道的问题,如下 (<()括号里面可以跟函数)

read user < <(echo david)
echo $user # 结果为david

image
实例:
image

相当于source执行了文件,文件里面的内容是trojan completion bash

总结

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

posted @ 2023-11-21 14:22  学不会xuebuhui  阅读(21)  评论(0编辑  收藏  举报
Language: javascript