A barra invertida é um caractere especial para muitas aplicações:
-
incluindo o shell: você precisa escapar usando outra barra invertida ou mais elegantemente, usando aspas simples quando possível:
$ printf '%s\n' foo\bar 'foo\bar' foo\bar foo\bar
Aqui o comando recebeu dois argumentos com o valor
foo\bar
, que foram ecoados como estão no terminal.(Acima, usei
printf
em vez deecho
, já que muitas implementações deecho
também fazem sua própria interpretação de barra invertida (aqui expandiria\b
em um caractere de retrocesso)). -
Mas a barra invertida também é um caractere especial para
grep
. Este comando reconhece muitas seqüências especiais como\(
,\|
,\.
e assim por diante. Assim, da mesma forma, você precisa alimentar o grep com um\
duplo para um caractere real de barra invertida. Isso significa que, usando o shell, você precisa digitar:grep 'foo\bar'
ou equivalentemente:
grep foo\\bar
(ambas as linhas dizem ao shell para transmitir
foo\bar
como argumento paragrep
). -
Muitos outros comandos interpretam barras invertidas em alguns de seus argumentos ... e dois níveis de escape são necessários (um para escapar da interpretação do shell, um para escapar da interpretação do comando).
A propósito, para o shell, aspas simples '…'
previnem qualquer tipo de interpretação de caracteres, mas aspas duplas apenas previnem algumas delas: em particular $
, '
e \
permanecem caracteres ativos em "…"
.