0
  #1   
   f() {
        cat "$1" >"$x"
    }
  #2   
    x=>(tr '[:lower:]' '[:upper:]') f <(echo 'hi there')

在#2 中哪个部分首先执行?x=>(tr '[:lower:]' '[:upper:]')或 f <(echo 'hi there')。#2 是复合复合词还是单个命令?

4

1 回答 1

3

单个命令可以有任意数量的var=value前缀;这些变量在该单个命令的持续时间内被导出到环境中,并且以后不存在。这不是特定于 bash 的,而是 POSIX sh 标准的一部分。

“先执行哪个部分?” 不是一个有意义的问题。FIFO 的文件名(/dev/fd如果操作系统允许,则为条目​​和匿名 FIFO)存储在 X 中的进程替换首先启动,但执行是异步的。(也就是说,因为进程替换写入的输出hi there被重定向为运行中tr的输入,所以具有echo必要阻塞直到tr准备好读取它正在写入的内容的那个)。

于 2017-09-18T12:42:38.313 回答