como a gramática de shell POSIX aceita FOO = bar foobar

4

Como a gramática da shell POSIX      link

aceite um comando simples com atribuição, como:

FOO=bar foobar

A primeira palavra aqui deve ser aceita como token ASSIGNMENT_WORD pela Regra 7b (embora essa regra não seja especificada explicitamente para ser aplicada às produções que envolvem ASSIGNMENT_WORD , mas acho que isso é entendido).

Então não há como aceitar a segunda palavra. A única maneira de tentar reduzi-lo seria com cmd_word production, mas isso exige que a regra 7b diga que este é um WORD e a regra 7b não diz nada sobre palavras que não contêm = .

É necessário adicionar à regra 7b uma declaração como:

If the TOKEN does not contain '=' then it is a 'WORD'.  

Sem isso, a gramática como está escrita atualmente está com defeito. Estou correto?

    
por Mark Galeck 05.08.2016 / 09:08

2 respostas

1

A gramática só atribuirá uma palavra; palavras sucessivas depois disso serão tratadas como um comando.

Lembre-se de que a regra que você está citando refere-se a um TOKEN e que não pode conter um espaço sem aspas. Consulte 2.3 Reconhecimento de Token , por exemplo,

  1. If the current character is an unquoted <blank>, any token containing the previous character is delimited and the current character shall be discarded.
    
por 05.08.2016 / 10:38
0

Acredito que esse endereço seja direto para o que você pergunta:

2.10.2 Shell Grammar Rules

  1. [Command Name]

    When the TOKEN is exactly a reserved word, the token identifier for that reserved word shall result. Otherwise, the token WORD shall be returned.

Essa é a regra 1, muito antes da regra 7. Qualquer palavra única (que não contenha = ) será interpretada como um "nome do comando". Se ele contiver um = , o número da regra 7 será aplicado.

Pode-se argumentar que a regra 1 não tem a exceção para a inclusão de um =, mas eu acho que isso deve ser assumido a partir da descrição de " Comandos simples ":

2.9.1 Simple Commands

A "simple command" is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator.

Em resumo: 'atribuições de variáveis' 'palavras' 'redirecionamentos'

E: 'atribuições de variáveis' devem conter um = .

    
por 06.08.2016 / 04:20

Tags