Esses caracteres são provavelmente ‘
(U + 2018 MARCA ÚNICA DE COTAÇÃO) e ’
(U + 2019 MARCA ÚNICA DE COTAÇÃO CERTA).
Como apenas um caractere de substituição está sendo exibido, o emulador de terminal provavelmente está configurado corretamente em UTF-8, mas a fonte que está sendo usada não possui esses caracteres. Então, o terminal usa o glifo para o caractere de substituição.
Com esse ajudante:
describe_non_ascii() {
perl -Mcharnames=full -Mopen=locale -lpe '
s{
[^[:ascii:]]
}{
sprintf("{U+%04X: %s}", ord($&), charnames::viacode(ord($&)))
}gex'
}
Eu posso ver:
$ rm -vr blah | describe_non_ascii
removed directory: {U+2018: LEFT SINGLE QUOTATION MARK}blah{U+2019: RIGHT SINGLE QUOTATION MARK}
Em UTF-8, esses caracteres são codificados em 3 bytes cada:
$ printf '\u2018\u2019' | hd
00000000 e2 80 98 e2 80 99 |......|
00000006
Portanto, se o terminal não foi configurado corretamente em UTF-8, esperaria ver 3 glifos, possivelmente três , se nenhum desses bytes fosse caracteres no conjunto de caracteres que o terminal espera para cada um.