Bash - Expansão de parâmetro para variável com espaço em branco principal

3

Eu continuo pensando sobre regras estranhas de expansão de parâmetro no shell.

Se eu declarar

NUMBERS="  one   two   "

e se executar o seguinte (note que não há espaço entre a variável e a string constante).

echo ${NUMBERS}'and three'

Bash (junto com Dash e Kornshell) ecoa:

one two and three

No entanto, a mesma saída é exibida com:

echo ${NUMBERS} 'and three'

Eu estava com a impressão de que, de acordo com as regras 2.6.5 Divisão de campos , 3a , o espaço em branco do IFS deve ser ignorado no início e no final da entrada, enquanto se expande a variável NUMBERS .

Por que o shell em uma ocasião coloca o espaço entre a expansão e a string constante e em outras ocasiões não?

    
por Robert Novotny 03.12.2016 / 17:34

1 resposta

4

Divisão de campo ocorre após expansão, e IFS espaço em branco é ignorado no início e no final da entrada todo (para evitar a criação de campos antes do primeiro "lógico" campo ou após o último). Assim, no momento em que ele começa a dividir o campo, seu primeiro exemplo é

echo   one   two   'and three'

que é analisado nos campos one , two e and three ; da mesma forma seu segundo exemplo é

echo   one   two    'and three'

que também é analisado nos campos one , two e and three .

    
por 03.12.2016 / 17:43