Estou observando um comportamento no bash que só acontece na minha pasta pessoal. Não consegui reproduzi-lo em nenhuma outra máquina ou pasta.
$ echo --one [--two] --three
--one f --three
$ # Huh?
$ echo [--two] # Why is echo changing my string?
f
$ echo --two # Does it happen without the brackets?
--two
$ echo [--x] --x # Does it happen with a different string?
f --x
$ echo [--arg] --arg # So anything within [-- ... ] changes to f?
[--arg] --arg
$ # WHAT?
$ echo [-x] [--x] [---x] # Does the number of hyphens matter?
[-x] f [---x]
$ cd ./folder; echo [--x]
[--x]
$ # ?????
Então isso só acontece na minha pasta pessoal. Por quê?
Não encontrei nenhuma menção à expansão de uma string para f
no manual do bash. Por que algumas strings estão expandindo para, f
mas outras não? Poderia ser o meu IFS? Tentei esvaziar completamente meu arquivo ~/.bashrc
, e o problema persiste. No entanto, quando tentei isso em um alpine
contêiner Docker, não consegui fazer a f
expansão ocorrer. O que está acontecendo aqui?
(Postando porque encontrei a solução, o que é bastante embaraçoso.)
O Bash está tratando
[--x]
,[--two]
e[--arg]
como padrões de globbing . Descobri que havia um arquivo~/f
na minha pasta pessoal.Partidas
[--two]
porquef
está no intervalo-
nat
tabela ASCII.[--x]
pelo mesmo motivo com-
parax
.Não-correspondências
[--arg]
porquef
está depois de ambos-
ea
na tabela ASCII.[-x]
porquef
não é-
nemx
.--x
e--two
porque esses não são padrões de aglomeração.[---x]
porquef
não está nem no intervalo de-
até-
, nem éx
.Se você realmente precisar desabilitar isso, execute
set -f
para desativar o globbing antes de executar o comando echo.