Tudo provavelmente funcionou como você esperava, mas você foi enganado por dois fenômenos diferentes:
-
lse 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 ? .