Os operandos de um utilitário devem aparecer sempre após todas as opções do utilitário?

1

POSIX diz

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

... The arguments following the last options and option-arguments are named "operands".

Isso significa que, pelo padrão POSIX, os operandos para um utilitário sempre devem aparecer depois de todas as opções do utilitário?

Por que alguns comandos ou utilitários dão errado se forem executados sem seguir a regra, enquanto outros não? Por exemplo:

  1. Na manpage de ls :

    SYNOPSIS
           ls [OPTION]... [FILE]...
    

    mostra que [FILE]... aparece após [OPTION]... .

    Mas parece que os operandos podem aparecer antes das opções. Por exemplo., ls . -a funciona da mesma forma que ls -a .

  2. Para o builtin read do bash, se eu especificar uma opção após um operando, será errado:

    $ read tt -u 5 5 < /tmp/tt
    bash: read: '-u': not a valid identifier 
    $ read -u 5  tt 5</tmp/tt 
    $ echo $tt 
    1 2 3 4 5
    
por Tim 10.02.2016 / 04:59

2 respostas

2

Sim, se você quiser que seu programa seja mais portátil.

Permitir que as opções apareçam em qualquer lugar entre os argumentos é específica do GNU .

Em qualquer caso, você sempre pode usar -- para denotar o fim das opções, qualquer coisa após -- será considerado operandos.

    
por 10.02.2016 / 05:23
1

Para responder à pergunta no título:

Should operands appear after options?

Sim.

Eles sempre?

Não.

Como opções de processo de um programa e operandos (em geral: argumentos) são inteiramente do desenvolvedor do utilitário. Alguns desenvolvedores seguem algumas regras gerais, outros desenvolvedores seguem outras regras gerais. As duas regras gerais mais comuns são as regras GNU e as regras POSIX.

    
por 10.02.2016 / 07:11