bash 和 zsh 里都支持進程替換(Process Substitution)

寫法為:

<(command) 或 >(command)

比如:

$ cat <(ls)       #把<(ls)當一個臨時文件,文件內容是ls的結果,cat這個臨時文件
 
$ ls > >(cat)      #把>(cat)當成臨時文件,ls的結果重定向到這個文件,最后這個文件被cat

用進程替換將 std 和 err 輸出分別定向:

$ some_command > >(/bin/cmd_for_stdout) 2> >(/bin/cmd_for_stderr)

另參考這里:

http://www.ibm.com/developerworks/cn/aix/library/au-satzsh.html

里面有更多例子,比如:

#使用臨時文件來將一個文件中的字段提取并重新組合到另一個文件中
$ cut -f1 fileone >t1
$ cut -f5 filetone >t5
$ paste t1 t5
 
#用進程替換可以無需臨時文件完成此任務
$ paste -d: <(cut -d: -f1 /etc/passwd) <(cut -d: -f5 /etc/passwd)
 
#進程替換支持嵌套
$ sort <(egrep -v '^#' <(paste -d: <(cut -d: -f5 /etc/passwd)  <(cut -d: -f1 /etc/passwd) ) )

原文地址:http://hongjiang.info/shell-process-substitution/