Tudo provavelmente funcionou como você esperava, mas você foi enganado por dois fenômenos diferentes:
-
ls
e alguns outros utilitários exibem?
para caracteres não imprimíveis por padrão -
?
é um glob que corresponde a um único caractere
Isso resulta no seguinte comportamento:
$ echo foo > $'$ printf '<%q>\n' *
<$'\a'>
$ ls -lb
total 0
-rw-r--r-- 1 chris chris 0 Aug 1 14:20 \a
7'
$ ls
?
$ cat ?
foo
Então parece que temos um arquivo que é literalmente chamado de ?
, certo? Na verdade, isso é apenas uma feliz coincidência dos dois fenômenos acima - o arquivo ainda é chamado de ^G
:
$ echo foo > $'$ printf '<%q>\n' *
<$'\a'>
$ ls -lb
total 0
-rw-r--r-- 1 chris chris 0 Aug 1 14:20 \a
7'
$ ls
?
$ cat ?
foo
Provavelmente tudo funcionou como você esperava, apesar do que apareceu imediatamente para indicar que o arquivo foi chamado literalmente de ?
.