Por que as barras invertidas impedem a expansão do alias?
Na primeira parte da minha pergunta, fornecerei algumas informações básicas como um serviço para a comunidade. A segunda parte contém a pergunta real.
Part I
Assume Eu criei o seguinte alias:
alias ls='ls -r'
Sei como desaliasar temporariamente (ou seja, substituir esse alias) das seguintes maneiras, usando:
1) o nome completo do caminho do comando:/bin/ls
2) substituição de comando:$(which ls)
3) o comando embutido:command ls
4) aspas duplas:"ls"
5) aspas simples:'ls'
6) um caractere de barra invertida:\ls
@Case 1 é óbvio e o caso 2 é simplesmente uma variação. O comando interno no caso 3 foi projetado para ignorar as funções do shell, mas aparentemente também funciona para contornar aliases. Por fim, os casos 4 e 5 são consistentes com osadrão @POSIX (2.3.1):
"uma palavra resultante identificada como sendo a palavra do nome de um comando simples deve ser examinada para determinar se é um nome alternativo válido e não citado."
e aBash Manual de referência (6.6):
"A primeira palavra de cada comando simples, se não estiver entre aspas, é verificada para ver se possui um alias."
Parte I
Aqui está a pergunta: por que o caso 6 (substituindo o alias dizendo\ls
) considerou citar a palavra? De acordo com o estilo desta pergunta, estou procurando referências à documentação "oficial".
A documentação diz que uma barra invertida apenas escapao caractere a seguir, ao contrário de aspas simples e duplas, que citam uma sequência de caracteres.adrão @POSIX (2.2.1):
"Uma barra invertida que não está entre aspas deve preservar o valor literal do caractere a seguir, com exceção de uma <nova linha>"
Bash Reference Manual (3.1.2.1):
"Uma barra invertida não citada '' é o caractere de escape do Bash. Ele preserva o valor literal do próximo caractere a seguir, com exceção da nova linha."
(BTW, não é "o próximo caractere a seguir" um pouco de exagero?)
Uma resposta possível pode ser que essa situação não seja tão especial: é semelhante a alguns casos nas citações ANSI-C, por exemplo.\nnn
. No entanto, isso ainda está escapando um caractere único (o caractere de oito bits cujo valor é o valor octal nnn), não uma sequência de caractere