Bash中的进程替换(process substitution)

本文详细介绍了Bash中的进程替换特性,包括<()和>()的用法。通过实例解析,展示了如何使用进程替换来生成临时文件名,以及在重定向和管道操作中的作用。讨论了与重定向和管道的区别,并提供了多个示例以帮助理解这一高级Bash脚本技巧。
摘要由CSDN通过智能技术生成

进程替换(process substitution)是Bash中的一个有意思的语法。

              语法规则:使用 <()  or  >()    <>与(之间没有空格


很多有关Bash的文档对这条规则并没有解释得很清楚,在这里综合部分搜索后的结果,得出个人理解:

首先举一个例子,看一下进程替换做了什么 :

a>    cat  <(ls)                #输出了当前目录下所有文件和目录的名称

b>    echo <(ls)             #输出/dev/fd/63

左边是比较简单的命令,cat 输出文件内容以文件的名称为参数,echo显示作为参数的字符文本。右边是使用相同的进程替换的部分<(ls),先不管<()和>()到底表示什么意思,根据执行结果的不同,容易观察并得出结论 <(ls)生成了一个名为/dev/fd/63的部分,它到底是什么?个人理解是共享文件但不是命名管道的概念,虽然/dev/fd/0 ,/dev/fd/1,/dev/fd/2有自己特定的含义。所以cat才能以文件读取它的内容并显示出来。这里需要说明的是<(ls)已经改变了ls的输出定向。因为如果此时ls的标准输出还是stdout的话,那么终端上应该是显示同样的内容两次,实际上只有一次。后面会提到,这跟>()是不同的。


注意前面提到了shell命令的参数,<() 给其它命令提供了参数。为什么这么做,难道Bash中已有重定向和管道还不够吗?广大屌丝朋友们我们在终端敲命令的时候,或者在脚本中,有的时候真的不想把命令敲太死,想有点变化&#x

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值