Diferença entre a divisão de palavras antes das expansões e a divisão de palavras durante as expansões no bash?

1

Bash manual diz que Expansion is performed on the command line after it has been split into words. . No entanto, na frase seguinte, afirma que há sete tipos de expansão executados e word splitting é o sexto. Pelo que entendi, esses dois são diferentes separações de palavras. Qual é a diferença entre essas duas separações de palavras?

    
por Martin 19.03.2017 / 23:49

1 resposta

2

Existe apenas uma divisão de palavras, e ocorre após expansão de chave, expansão de til, expansão de parâmetro e variável, substituição de comando e expansão aritmética, mas antes da expansão do nome do caminho.

(Dica: a divisão word divide as palavras em mais palavras. Você está confundindo a divisão de palavras com a divisão inicial da linha de comando em tokens.)

  1. Primeiro, a linha de comando é dividida em palavras (ou "tokens") separadas pelos metacaracteres | , & , ; , ( , ) , < , > , < space > e < tab >.

  2. Em seguida, as palavras que representam a linha de comando são analisadas em listas, pipelines e comandos simples.

  3. Expansões acontecem quando cada comando simples é considerado para execução.

    • Após completar a expansão da chave, expansão do til, expansão de parâmetros e variáveis, substituição de comandos e expansão aritmética, o shell passa pelos resultados sem aspas das expansões e os divide em palavras, desta vez separados pelos caracteres em $IFS ( não os metacaracteres que foram usados para dividir a linha de comando).

    • Finalmente, o shell passa novamente pela lista de resultados de expansão sem aspas e executa a expansão do nome do caminho.

Leia todos os detalhes da especificação POSIX da linguagem de comandos shell . (O POSIX descreve um shell um pouco mais simples; o Bash implementa algumas extensões, mas deve ser fácil ver como elas se encaixam.)

Para responder a pergunta conforme solicitado: a divisão inicial da linha de comando em tokens separados por metacaracteres do shell; A divisão de palavras divide os resultados da expansão em palavras separadas por caracteres em $IFS .

    
por 22.05.2018 / 01:00