head -num is hetzelfde als head -n num in plaats van head -n -num (waarbij num een willekeurig getal is)

Voorbeeld:

$ echo -e "a\nb\nc\nd"|head -1 a $ echo -e "a\nb\nc\nd"|head -n 1 a $ echo -e "a\nb\nc\nd"|head -n -1 a b c 

Dit head -1 lijkt nergens te worden gedocumenteerd.

$ head --help

Usage: head [OPTION]... [FILE]... Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]NUM print the first NUM bytes of each file; with the leading "-", print all but the last NUM bytes of each file -n, --lines=[-]NUM print the first NUM lines instead of the first 10; with the leading "-", print all but the last NUM lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names -z, --zero-terminated line delimiter is NUL, not newline --help display this help and exit --version output version information and exit NUM may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Full documentation at: <https://www.gnu.org/software/coreutils/head> or available locally via: info "(coreutils) head invocation" 

Man-pagina voor head (op Fedora 28):

HEAD(1) User Commands HEAD(1) NAME head - output the first part of files SYNOPSIS head [OPTION]... [FILE]... DESCRIPTION Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]NUM print the first NUM bytes of each file; with the leading "-", print all but the last NUM bytes of each file -n, --lines=[-]NUM print the first NUM lines instead of the first 10; with the leading "-", print all but the last NUM lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names -z, --zero-terminated line delimiter is NUL, not newline --help display this help and exit --version output version information and exit NUM may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. AUTHOR Written by David MacKenzie and Jim Meyering. REPORTING BUGS GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report head translation bugs to <https://translationproject.org/team/> COPYRIGHT Copyright © 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO tail(1) Full documentation at: <https://www.gnu.org/software/coreutils/head> or available locally via: info "(coreutils) head invocation" GNU coreutils 8.29 December 2017 HEAD(1) 

Answer

De info-pagina en de online handleiding voor GNU head bevat dit deel:

Voor compatibiliteit head ondersteunt ook een verouderde optiesyntaxis -[NUM][bkm][cqv], die alleen wordt herkend als deze eerst wordt gespecificeerd.

Het idee dat head -1 hetzelfde is als head -n 1 is dat het streepje geen mi is nus-teken, maar een markering voor een opdrachtregeloptie. Dat is de gebruikelijke gewoonte: dingen die beginnen met streepjes zijn opties die bepalen hoe de verwerking moet worden uitgevoerd, andere dingen op de opdrachtregel zijn bestandsnamen of andere werkelijke doelen die moeten worden verwerkt. In dit geval is het geen optie voor één teken, maar een afkorting voor -n, maar het is eigenlijk nog steeds een optie en geen bestandsnaam. In head +1 of head 1, de +1 of 1 zouden echter als bestandsnamen worden gebruikt.

Een dubbel streepje -- of --something heeft op zichzelf ook een duidelijke betekenis (--) het stopt de verwerking van opties, en wanneer gevolgd door iets anders, markeert het een lange optie in GNU-stijl. Dus als head --1 voor head -n -1 zou overeenkomen met de gewoonte.

Als ik zou moeten raden, “zou ik aannemen dat de vreemde snelkoppeling voor -n i bestaat voor positieve i maar niet voor negatief i aangezien het eerste geval vaker nuttig en gemakkelijker te implementeren is. (Bovendien is de standaard head wordt alleen gedefinieerd voor een positieve waarde van regels.)

Reacties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *