Significado de barra invertida

3

Por que o comando a seguir imprime Smith , mas não \Smith ?

echo \Smith
    
por DUKE 26.07.2014 / 02:48

2 respostas

4

A barra invertida é um caractere de escape que:

shall preserve the literal value of the following character, with the exception of a <newline>. ... The <backslash> ... shall be removed

Portanto, \S significa a mesma coisa que S , porque S não é um caractere de nova linha e também não é um caractere especial de shell que pode ser ignorado ( $ , " , ' , { , [ , ' , \ , | , & , ; , < , > , ( , ) , ? , * , [ , # , ~ , = , % , ou tabulação). Para incluir uma barra invertida literal, escape por vez:

echo \Smith

nota: este é o comportamento especificado para o seu exemplo de caso não identificado, mas pode ser alterado se for citado de outra forma ou read in de um arquivo

    
por 26.07.2014 / 02:53
2

\S escapa do S , que não é um caractere especial, portanto, dá S . Você precisa dobrar a barra invertida para imprimi-lo: echo \Smith

EDIT: Mas, em geral, é melhor usar printf . Veja a diferença entre echo x\by , que produz "y" (o "x" é substituído pelo backspace \b ) por algumas versões de echo (traço, zsh) e printf "%s\n" x\by , que geram "x \ por ".

    
por 26.07.2014 / 02:53