2014-02-14 35 views
0
awk '{print FILENAME, $0}' <(ls) # output: /dev/fd/4 file 
awk '{print FILENAME, $0}' < <(ls) # output: - file 

在上述单行程序中,第一个生成文件描述符,然后生成文件名,第二个生成hypen( - )字符,然后生成文件名。为什么会这样?了解Unix进程替换行为

回答

1

你可以看到它是这样的:

awk '{print FILENAME, $0}' <(ls) 
# is the same as 
awk '{print FILENAME, $0}' output_of_ls_command 

awk会读tmp文件(由bash创造,让我们将其命名为output_of_ls_command(这是/dev/fd/4你的情况))


awk '{print FILENAME, $0}' < <(ls) 
# is the same as 
awk '{print FILENAME, $0}' < output_of_ls_command 

awk会读取stdin(bash)读取tmp文件,并将内容发送至awkFILENAME-