Por que o sort -k5nr não é um erro de sintaxe?

2
$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr

Eu descubro que esses dois comandos geram a mesma saída.
Mas eu não entendo porque eu posso combinar 5 com n ?
Por que não um erro de sintaxe?

edit:

$ ls -l | cut -d: -n -f 2    
$ ls -l | cut -d:nf2
cut: the delimiter must be a single character
Try 'cut --help' for more information.

Por que cut dose não se comporta como sort ?

    
por kev 24.12.2011 / 08:48

1 resposta

5

Porque o sort é implementado de maneira a analisá-los da maneira esperada.

Veja também aqui :

  • Sometimes options and their arguments are run together, sometimes separated by whitespace, and sometimes by a character, typically : or =. Thus "Prog -fFilename", "Prog -f Filename", "Prog -f:Filename", "Prog -f=Filename".
  • Some programs allow single-character options to be combined; others do not. The switch "-fA" may mean the same as "-f -A", or it may be incorrect, or it may even be a valid but different parameter.

Isso parece uma combinação de ambos (funciona sem espaço em branco e combinação de opções de caractere único).

Eles são simplesmente programas diferentes, cuja análise de argumentos é implementada de maneira diferente.

Em coreutils 8.13, compare o seguinte:

  • src/sort.c linha 4315, invocando a função especial de análise de números inteiros parse_field_count , que retorna com o primeiro caractere inválido (isto é, quando o valor numérico é finalizado e a próxima opção é iniciada): É por isso que sort pode manipular seus argumentos. li>
  • src/cut.c , linha 803 ff., simplesmente usando o comportamento normal getopt de interpretar tudo até o próximo espaço em branco como parâmetro para a opção atual.
por 24.12.2011 / 09:06

Tags