Estou usando Linux e a seguinte versão do bash:
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
Quando eu digito:
echo file{[1,2],3}.txt
Espero que a expansão do suporte seja feita primeiro, então:
echo file[1,2].txt file3.txt
Depois disso, espero que pare por aí, já que [1,2] não é um globbing válido. No entanto, ele fornece o seguinte como saída:
file[1.txt file2].txt file3.txt
Por que?
Lista de arquivos no diretório atual (resultado do ls
comando):
go.mod hello.sh hi main.go
Porque você está dizendo isso :) Isto é o que o bash vê:
O
[
e]
não têm nenhum significado especial neste contexto, os globs não são expandidos dentro de expansões de chaves: se uma expansão de chaves resultar em um glob, esse glob seria avaliado pelo shell após a expansão de chaves.Então aqui, o que acontece é que o shell vê três elementos separados por vírgula na chave:
[1
,2]
e3
. É por isso que ele imprime devidamentefile[1.txt
,file2].txt
efile3.txt
. Não é diferente de usar algo comofile{a,b,c}.txt
.Você pode ver isso acontecendo com
set -x
:Esse comportamento é documentado na
EXPANSIONS
seçãoman bash
onde a ordem de precedência é fornecida:Como um aparte,
[1,2]
é um padrão globbing perfeitamente válido, só não é expandido dentro das chaves. Por exemplo:Note que em globs,
[a,b]
corresponde a qualquer um dos caracteresa
,,
oub
. Não significa "a ou b".