head -num est identique à head -n num au lieu de head -n -num (où num est un nombre quelconque)

Exemple:

$ 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 

Ce head -1 ne semble pas être documenté nulle part.

$ 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" 

Page de manuel pour head (sur 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) 

Réponse

La page dinformations et le manuel en ligne pour GNU head contient cette partie:

Pour la compatibilité head prend également en charge une syntaxe doption obsolète -[NUM][bkm][cqv], qui nest reconnue que si elle est spécifiée en premier.

Lidée que head -1 est identique à head -n 1 est que le tiret nest pas un mi signe nus, mais un marqueur pour une option de ligne de commande. Cest la coutume habituelle: les éléments qui commencent par des tirets sont des options contrôlant le traitement, les autres éléments de la ligne de commande sont des noms de fichiers ou dautres cibles réelles à traiter. Dans ce cas, ce nest pas une option à un seul caractère, mais un raccourci pour -n, mais cest toujours essentiellement une option, et non un nom de fichier. Dans head +1 ou head 1, le +1 ou 1 serait toutefois pris comme nom de fichier.

Un double tiret -- ou --something a également une signification distincte, en lui-même (--) il arrête le traitement des options et, lorsquil est suivi par autre chose, il marque une option longue de style GNU. Donc, avoir head --1 pour head -n -1 ne serait pas « t correspondre à la coutume.

Si je devais deviner, je suppose que le raccourci pittoresque pour -n i existe pour i positif mais pas pour i car le premier cas est utile plus souvent et plus facile à implémenter. (En outre, le standard head nest défini que pour une valeur positive de lignes.)

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *