Expansão de til é definida por POSIX como:
A "tilde-prefix" consists of an unquoted <tilde> character at the beginning of a word, followed by all of the characters preceding the first unquoted <slash> in the word, or all the characters in the word if there is no <slash>. In an assignment, multiple tilde-prefixes can be used: [...] following the <equals-sign> of the assignment, following any unquoted <colon>, or both. [...] If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the <tilde> are treated as a possible login name from the user database. [...] If the login name is null (that is, the tilde-prefix contains only the tilde), the tilde-prefix is replaced by the value of the variable HOME. If HOME is unset, the results are unspecified. [...]
Portanto, a resposta mais curta é "porque é definida dessa maneira": citando qualquer um dos caracteres no prefixo, incluindo ~
, suprime a expansão.
Ele também define a expansão como sempre resultando em uma única palavra, então seria desnecessário citar:
The pathname resulting from tilde expansion shall be treated as if quoted to prevent it being altered by field splitting and pathname expansion.
Onde alguns dos caminhos exigem aspas, mas o resto é um prefixo til, você pode combinar diretamente a expansão do til e as cotações comuns:
$ cat ~/"file name with spaces"
No mais amplo "por que": como não há nenhum uso concebível para a divisão de palavras ~
, esse deve ser o comportamento padrão, em vez de exigir que seja citado. Porque não há necessidade de citá-lo, dar a ~
um significado especial dentro de citações seria uma complicação desnecessária. E, claro, razões históricas significam que não poderia ser mudado agora, mesmo que isso fosse desejável.