seq shell命令中的-0是什么意思

时间:2015-05-20 13:43:04

标签: shell

当我使用-0运行seq时,为什么将它视为10? 我已经尝试了两个参数和三个。

praveen@praveen:~$ seq -0
1
2
3
4
5
6
7
8
9
10

seq(GNU coreutils)8.21

3 个答案:

答案 0 :(得分:4)

看起来你发现了一个错误http://bugs.gnu.org/17800。那是fixed 2014-06-18

答案 1 :(得分:2)

比较coreutils 8.23和8.21源代码。

-开头且具有全数字的选项:

  if (argv[optind][0] == '-'
      && ((optc = argv[optind][1]) == '.' || ISDIGIT (optc)))
    {
      /* means negative number */
      break;
    }

但在此之后-未被考虑在内:

if (seq_fast (s1, s2))

在8.23中,这是固定的:

if (*s1 != '-' && *s2 != '-' && seq_fast (s1, s2))

您可以在FTP上获取coreutils来源:http://ftp.gnu.org/gnu/coreutils/ 文件为src/seq.c

答案 2 :(得分:0)

答案更多的是在WTF领域,请让我先解释一下手册页:

SEQ(1)用户命令 NAME
       seq - 打印一系列数字

概要

   seq [OPTION]... LAST
   seq [OPTION]... FIRST LAST
   seq [OPTION]... FIRST INCREMENT LAST

描述

   Print numbers from FIRST to LAST, in steps of INCREMENT.

   Mandatory arguments to long options are mandatory for short options
   too.

   -f, --format=FORMAT
          use printf style floating-point FORMAT

   -s, --separator=STRING
          use STRING to separate numbers (default: \n)

   -w, --equal-width
          equalize width by padding with leading zeroes

   --help display this help and exit

   --version
          output version information and exit

   If FIRST or INCREMENT is omitted, it defaults to 1.  That is, an
   omitted INCREMENT defaults to 1 even when LAST is smaller than FIRST.
   The sequence of numbers ends when the sum of the current number and
   INCREMENT would become greater than LAST.  FIRST, INCREMENT, and LAST
   are interpreted as floating point values.  INCREMENT is usually
   positive if FIRST is smaller than LAST, and INCREMENT is usually
   negative if FIRST is greater than LAST.  FORMAT must be suitable for
   printing one argument of type 'double'; it defaults to %.PRECf if
   FIRST, INCREMENT, and LAST are all fixed point decimal numbers with
   maximum precision PREC, and to %g otherwise.

现在让我们运行你的命令......

Seq -0

1
2
3
4
5
6
7
8
9
10

...如果你阅读了手册页,你会看到你没有像你期望的那样传递一个参数?如果你尝试

,你传递-0和负0一样
seg 0

你不会得到任何东西,因为那......就是这样。现在,如果你想要一些有趣的类型 应该打印-0到15

seg -0 15  
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
.0
.1
.2
.3
.4
.5
.6
.7
.8
.9
/0
/1
/2
/3
/4
/5
/6
/7
/8
/9
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15 

所以要回答你的问题,那么,你给它的输入并没有让它产生期望,所以它返回了奇怪的结果。你不能有-0所以如果你尝试-ANY NUMBER,比如-3,你会发现它们什么都没有返回,所以它可能是一个内置函数来返回1-10。