O problema é que a substituição do comando não é citada. Quando a substituição de comando usa a saída do comando echo
como argumento para o segundo comando echo
, os resultados do comando são submetidos à divisão de palavras e globulação de arquivos. Como apontado nos comentários, os caracteres entre colchetes, [127.0.0.1]
, corresponderão a qualquer arquivo cujo nome seja exatamente um caractere e seja um dos 1
, 2
, 7
ou 0
(o padrão corresponderia a .
apenas o shell ignora os links de diretório .
e ..
). Quando criei um arquivo chamado 1
, consegui replicar seu resultado.
Para evitar que os resultados da substituição de comando sejam submetidos a globbing, você deve colocá-lo entre aspas duplas:
echo "$(echo "This will show an IP address in square brackets: [127.0.0.1]")"
Veja também os seguintes artigos relacionados da Wiki de Greg's (particularmente o primeiro que cobre a necessidade de citações duplas dentro e fora da substituição de comando):