head -num é o mesmo que head -n num em vez de head -n -num (onde num é qualquer número)

Exemplo:

$ 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 

Isso head -1 não parece estar documentado em lugar nenhum.

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

Página do manual para head (no 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) 

Resposta

A página de informações e o manual online para GNU head contém esta parte:

Para compatibilidade head também suporta uma sintaxe de opção obsoleta -[NUM][bkm][cqv], que é reconhecida apenas se for especificada primeiro.

A ideia que head -1 é o mesmo que head -n 1 é que o travessão não é um mi sinal nus, mas um marcador para uma opção de linha de comando. Esse é o costume usual: coisas que começam com travessões são opções que controlam como fazer o processamento, outras coisas na linha de comando são nomes de arquivos ou outros destinos reais para processar. Neste caso, não é uma opção de um único caractere, mas é uma abreviação de -n, mas ainda é basicamente uma opção, não um nome de arquivo. Em head +1 ou head 1, +1 ou 1 seriam considerados nomes de arquivo, entretanto.

Um traço duplo -- ou --something também tem um significado distinto, por si só (--) ele para o processamento de opções e, quando seguido por outra coisa, marca uma opção longa do estilo GNU. Portanto, ter head --1 para head -n -1 wouldn “t coincidir com o costume.

Se eu fosse adivinhar, presumiria que o atalho curioso para -n i existe para i positivo, mas não para i negativo, pois o primeiro caso é útil com mais frequência e mais fácil de implementar. (Além disso, o padrão head é definido apenas para um valor positivo de linhas.)

Comentários

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *