Quando a expansão do histórico acontece em bash?

0

Quando a expansão do histórico acontece?

  1. Do manual do bash

    Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘'’, ‘\’, and, when history expansion is enabled, ‘!’.

    Como as aspas duplas são reconhecidas no estágio de análise pelo analisador, é correto que a expansão da história deva acontecer após a análise?

    Se sim, quando isso acontece em relação a expansões de shell, como expansão de chaves, expansão de parâmetros, expansão de nomes de arquivos, etc?

  2. Mas acho que a expansão da história é fornecida pela linha de o shell, então é processado antes da análise e análise lexical? Somente como preenchimento automático no shell. Estou faltando alguma coisa?

Obrigado.

    
por Tim 20.05.2018 / 23:51

1 resposta

5

Citando o manual do bash :

History expansion is performed immediately after a complete line is read, before the shell breaks it into words.

A expansão do histórico é o primeiro estágio do processamento, mesmo antes da análise do shell, e é por isso que as aspas duplas não protegem ! : o segundo é processado antes das aspas duplas. Ele é manipulado pela biblioteca de históricos, que implementa sua própria análise, com algumas maneiras de proteger o operador de histórico:

Only ‘\’ and ‘'’ may be used to escape the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.

No momento em que o analisador do shell começa a manipular uma string, ele já foi analisado pela biblioteca de históricos e a expansão do histórico já ocorreu.

    
por 21.05.2018 / 00:22