A expansão de til é definida pelo POSIX como:
A "til prefixo" consiste em um unquoted <tilde> caractere no início de uma palavra, seguido por todos os caracteres que precedem o primeiro unquoted <barra> na palavra, ou todos os caracteres da palavra se não houver < barra>. Em uma atribuição, vários prefixos de til podem ser usados: [...] após o <equals-sign> da atribuição, após qualquer <colon> não citado ou ambos. [...] Se nenhum dos caracteres no prefixo til for citado, os caracteres no prefixo til após o <tilde> serão tratados como um possível nome de login no banco de dados do usuário. [...] Se o nome de login for nulo (ou seja, o prefixo til contém apenas o til), o prefixo til é substituído pelo valor da variável HOME. Se HOME não estiver definido, os resultados não serão especificados. [...]
Portanto, a resposta mais curta é "porque é definida dessa maneira": citar qualquer um dos caracteres no prefixo, incluindo o ~
, suprime a expansão.
Ele também define a expansão como sempre resultando em uma única palavra; portanto, citar seria desnecessário:
O nome do caminho resultante da expansão do til deve ser tratado como se fosse citado para evitar que seja alterado pela divisão de campos e expansão do nome do caminho.
Onde parte do caminho requer citações, mas o restante é um prefixo de til, você pode combinar a expansão de til e as citações comuns diretamente:
$ cat ~/"file name with spaces"
No "porquê" mais amplo: como não há uso concebível para a divisão de palavras ~
, esse deve ser o comportamento padrão, em vez de exigir que seja citado. Como não há necessidade de citá-lo, atribuir ~
um significado especial a aspas seria uma complicação desnecessária. E, é claro, razões históricas significam que não poderia ser alterado agora, mesmo que isso fosse desejável.