1

标题总结了它。

$ echo `seq 0 10` `seq 5 15` | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15

为什么这不起作用?

即使我不使用seq

echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15

甚至echo直接放弃:

$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers
$ sort -n numbers 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
4

4 回答 4

10

sort(1)排序线。您必须自己解析空格分隔的数据:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
于 2009-10-07T00:25:08.250 回答
9

因为您需要换行符sort

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
于 2009-10-07T00:25:58.593 回答
5

你有单行输入。没有什么可以排序的。

于 2009-10-07T00:25:21.077 回答
3

您键入的命令会导致数字序列全部传递到sort一行中。那不是你想要的。只需将输出seq直接传递给sort

(seq 0 10; seq 5 15) | sort -n

顺便说一句,正如你刚刚发现的那样,构造

echo `command`

通常不会做你期望的事情,并且对于你实际期望的事情是多余的:它告诉 shell 捕获输出command并将其传递给echo,它再次将其作为输出产生。让命令的输出直接通过(除非你真的打算让它处理echo,也许是为了扩展转义序列,或者将所有内容折叠到一行)。

于 2009-10-07T08:03:24.237 回答