2015-05-20 90 views
3

當我用-0運行seq時,爲什麼它將它視爲10? 我已經嘗試過兩個參數也有三個。這個-0在seq shell命令中意味着什麼

[email protected]:~$ seq -0 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

SEQ(GNU的coreutils)8.21

+1

我的版本'seq(GNU coreutils)8.23)'沒有給出任何輸出。 –

+0

我的版本('seq(GNU coreutils)8.21')符合這個問題。 –

回答

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

4

看起來你發現了一個bug,http://bugs.gnu.org/17800。這是fixed 2014-06-18

+0

並記住孩子們,始終驗證您的輸入。有一天,有人給Unicode添加一組新的數字,一段時間後,別人會用它來對付你:-) –

0

那麼答案是多在WTF區域buuut讓我與該男子頁先說明一下:

SEQ(1)用戶命令 NAME
序列 - 打印數字

提要

序列
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 

...如果你閱讀man page你會看到你不及格的說法也許你所期望的嗎?如果你嘗試的話,你傳遞-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。

+0

從上面的帖子中也可以看出,它是一個bug;) 看起來你發現了一個bug,http ://bugs.gnu.org/17800。它已於2014-06-18修復。 - 羅伯特卡爾霍恩謝謝!,但我認爲我的觀點仍然有效,堅持使用它預期使用的方式,你會沒事的,有什麼用處是-0? –

+0

請忽略手冊頁中所有不相關的部分。 –

+0

我覺得'seq --help |頭-12「就足夠了。無需引用整個手冊頁。 – myaut