3

我有三个文件,名为一、二、三。

一个包含:

1
3
2

两个包含:

4
6
5

三包含:

7
9
8

当我给出以下命令时:

$sort < One < Two < Three

我得到输出:

7
8
9

但是当我给出以下命令时:

$sort One Two Three

我得到输出:

1
2
3
4
5
6
7
8
9

任何人都可以阐明这里发生了什么吗?为什么在第一个命令中没有考虑来自 1 和 2 的输入?

4

2 回答 2

4

您的命令与以下命令相同:

sort 0<1 0<2 0<3

(文件描述符 0 是标准输入)

重定向按照它们出现的顺序进行处理,从左到右。
sort命令本身看不到任何这些文件。一个一个
bash打开文件1,,,2。 所以最右边的覆盖左边的。 最后,读取绑定到文件的文件。3file descriptor 0

sortfile descriptor 03

于 2012-09-11T13:54:38.823 回答
2

您不能使用 bash 重定向多个文件。要解决此限制,您可以使用 cat:

cat 1 2 3 | sort

附带说明一下,zsh 支持它所谓的 mutlios:

 zsh$ setopt multios
 zsh$ sort < 1 < 2 < 3 > 4 > 5
 zsh$ tr '\n' ' ' < 4 < 5
 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 
于 2012-09-11T14:08:17.443 回答