有几个unix命令设计用于对两个文件进行操作.通常,这样的命令允许通过使用单个破折号代替文件名从标准输入读取其中一个"文件"的内容.
comm -12 <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)
我最初不相信的反应是,"这不应该工作.标准输入将只有两个文件的串联.命令将无法分开文件,甚至意识到已经给出了两个文件的内容. "
当然,这种结构确实有效.我用两者测试了它,comm并diff在cygwin 1.7.7上使用了bash 3.2.51.我很好奇它是如何以及为什么有效的:
Pau*_*ce. 10
Bash,Korn shell(ksh93,无论如何)和Z shell都支持进程替换.这些文件显示为实用程序的文件.试试这个:
$ bash -c 'echo <(echo)'
/dev/fd/63
$ ksh -c 'echo <(echo)'
/dev/fd/4
$ zsh -c 'echo <(echo)'
/proc/self/fd/12
Run Code Online (Sandbox Code Playgroud)
您将看到与所示文件描述符类似的文件描述符.
这是标准的Bash扩展.<(sort file1)使用sort file1命令的输出打开管道,为管道提供临时文件名,并在comm命令行上传递该临时文件名.
你可以通过echo告诉你传递给程序的内容来了解它是如何工作的:
echo <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6681 次 |
| 最近记录: |