Por que o cat não usa opções da maneira que eu imagino que os programas UNIX usem switches?

4

Sou usuário do UNIX há mais anos do que me preocupo e, nessa época, fui treinado para esperar que, quando interrupções contraditórias fossem dadas a um programa, o último vencesse. Recentemente tenho notado que

cat -bn file

e

cat -nb file

ambos usam a opção -b (número de linhas não vazias) sobre a opção -n (numerar todas as linhas). Eu obtenho esse comportamento tanto no BSD quanto no Linux, então não acho que seja um truque de implementação. Isso é algo que é especificado em algum lugar e eu sou louco apenas por esperar que o primeiro exemplo numerasse todas as linhas?

    
por Chas. Owens 09.06.2010 / 13:55

2 respostas

5

Eu dei uma olhada no código-fonte do FreeBSD para cat (1) , e o linhas de origem relevantes são:

case 'b':
    bflag = nflag = 1;  /* -b implies -n */

Então, isso parece uma decisão deliberada de design; a interpretação de -b é que ela modifica o comportamento de -n , em vez de -b e -n sendo duas alternativas mutuamente exclusivas.

    
por 09.06.2010 / 14:33
1

A maioria dos comandos do sistema usa C getopt (3) da biblioteca padrão ou alguma variação e analisa as opções da esquerda para a direita. Então, como você observou, o último ganha.

    
por 09.06.2010 / 14:42