A barra invertida costuma ser usada para dizer "faça o próximo caractere representar a si mesmo em vez de dar um significado especial". Dizemos que a barra invertida cita o próximo caractere. Esse significado está presente em muitas linguagens de programação, incluindo a sintaxe do shell. Por exemplo, em rpm-qa rpmname\*
, a barra invertida faz com que o caractere *
seja passado no argumento para o comando rpm-qa
. Em contraste, rpm-qa rpmname*
substitui rpmname*
pela lista de nomes de arquivos no diretório atual, começando com rpmname
. (Se não houver nenhum arquivo correspondente, o bash deixa rpmname*
sozinho; o zsh, por padrão, reclama que não há correspondências.)
O shell oferece outra maneira de interpretar um caractere literalmente, ou seja, torná-lo autônomo em vez de ser interpretado de alguma maneira especial. Isso é citar, o que cancela o significado especial de toda uma sequência de caracteres. Existem dois tipos de aspas: aspas simples '
fazem cada caractere representar a si próprio até a próxima aspa simples, enquanto as aspas duplas "
conservam um significado especial para alguns caracteres ( "
, $
, \
e '
). Em echo 'that'\''s no moon'
, o comando echo
recebe um único argumento, que é a concatenação de that
(escrita com uma cadeia literal, não que houvesse qualquer caractere com um significado especial nesse caso específico), '
( a aspas simples invertidas cancela o significado especial dessa aspa simples, então isso se expande para um caractere de aspas simples) e s no moon
(os espaços perdem seu significado especial, pois estão entre aspas: em vez de separar argumentos, eles são parte do argumento).
No shell, quando a barra invertida tem um significado especial, geralmente é para citar o próximo caractere. Mas:
- Dentro de aspas simples, a barra invertida não tem significado especial.
- Dentro de aspas duplas, a barra invertida cita apenas o caractere seguinte, se for um dos
"$\'
. Caso contrário, tanto a contrabarra quanto o caractere seguinte são interpretados literalmente, por exemplo"\a"
é a string de dois caracteres\a
. - Dentro de literais de citação única com dolar, a contrabarra tem um significado diferente, semelhante ao que existe em C . Uma barra invertida seguida por dígitos octal ou por certas letras fornece maneiras alternativas de inserir caracteres, o que é útil para caracteres não imprimíveis. Por exemplo,
\n
é um N minúsculo,"\n"
é uma barra invertida + n, mas$'\n'
é um caractere de nova linha.
Em grep '\s/tmp' /etc/fstab
, as aspas simples fazem com que grep
receba o argumento \s/tmp
. Este argumento é uma expressão regular . Existem muitas variantes de sintaxe para expressões regulares, mas a maioria é baseada em um dos dois padrões: POSIX expressões regulares básicas (BRE) e regulares regulares estendidos expressões (ERE) . ERE segue a convenção generalizada de que a barra invertida seguida por qualquer outra coisa que não uma letra ou um dígito cita o seguinte caractere. Mas, por razões históricas, no BRE, uma barra invertida pode, às vezes, tornar o próximo caractere especial quando, de outro modo, não seria. Nesse caso, \s
é uma extensão grep do GNU para a sintaxe básica de regex, disponível tanto com BRE quanto com ERE, ou seja, um caractere de espaço em branco. Assim, grep '\s/tmp' /etc/fstab
lista as linhas em /etc/fstab
que contêm /tmp
precedidas por um espaço ou tabulação.