<(命令)是过程替代。基本上,它创建一个称为“命名管道”的特殊类型的文件,然后将该命令的输出重定向为命名管道。因此,例如,假设您想要浏览特大目录中的文件列表。你可以这样做:
ls /usr/bin | more
或者这样:
more <(ls /usr/bin)
但不是这样的:
more $(ls /usr/bin)
当你进一步调查的原因就很清楚:
~$ echo $(ls /tmp)
gedit.maxtothemax.436748151 keyring-e0fuHW mintUpdate orbit-gdm orbit-maxtothemax plugtmp pulse-DE9F3Ei96ibD pulse-PKdhtXMmr18n ssh-wKHyBU1713 virtual-maxtothemax.yeF3Jo
~$ echo <(ls /tmp)
/dev/fd/63
~$ cat <(ls /tmp)
gedit.maxtothemax.436748151
keyring-e0fuHW
mintUpdate
orbit-gdm
orbit-maxtothemax
plugtmp
pulse-DE9F3Ei96ibD
pulse-PKdhtXMmr18n
ssh-wKHyBU1713
virtual-maxtothemax.yeF3Jo
/dev/fd /不管像文本文件一样圆括号之间的命令的输出。
难道你不是指“<<”? – reinierpost 2010-03-14 17:51:34
无论如何,“man sh”是你的朋友。 – reinierpost 2010-03-14 17:52:05
它不是'<<',它是'<和'<(...)'运营商,如果我记得没错 – 2010-03-14 17:55:37