Alguém pode explicar o estranho comportamento da barra invertida na substituição do comando?

5

Eu descobri que no bash

echo 'echo \'

saída \

\

mas

echo 'echo \ '

não produz nada

    
por tmpbin 03.12.2017 / 09:20

1 resposta

8

O comportamento documentado de barras invertidas na substituição de comando no estilo backtick é :

When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by ‘$’, ‘'’, or ‘\’.

Ou seja, barras invertidas escapam de cifrões, backticks e outras barras invertidas antes do comando ser dado ao shell para processar (incluindo antes do processamento normal de barras invertidas e aspas). Isso significa que:

'echo \ '

é equivalente a

$(echo \ )

e gera um único espaço. Esse espaço único é inserido como o argumento para seu echo externo e, em seguida, geralmente perdido durante a divisão de campo, portanto, apenas echo é executado sem argumentos.

Por outro lado

'echo \'

deixa um \ pendente no final do comando, o que geralmente não é legal (ele indicaria continuação de linha em outro lugar), e está sendo tratado como um literal. Tanto bash como dash fazem isso, assim como tcsh , mas zsh não. Não parece ser explicitamente especificado no POSIX ou em outro lugar, então suponho que essa implementação comportamento definido.

O uso da substituição do comando $( ... ) permite que você escreva qualquer script sem interferências. Quase sempre será melhor que a substituição de backtick.

    
por 03.12.2017 / 10:33

Tags