Respostas:
É apenas uma pergunta "porque eu quero saber" ou existe um caso de uso real para isso? Poderíamos fazer ginástica para fazê-lo:
$ eval echo\ {a,b,c}\;
a
b
c
Mas eu caçava qualquer um que estivesse colocando esses tipos de comandos ofuscantes em nossos scripts do sistema.
Por que não buscar clareza:
$ for X in {a,b,c}; do echo $X; done
Você pode até ficar louco e colocar algumas novas linhas e recuar um pouco para que você sempre possa entender o que está tentando fazer.
for
obras para isso, mas ainda é mais digitação: P
eval git branch -d \{ branch-a, branch-b }\;
Com base na resposta selecionada de Mark Mann , pude derivar ainda mais este exemplo, que funciona muito bem:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
O que isso está mostrando é que, quando você está usando várias ocorrências de expansão de chaves dentro de uma linha, o exemplo original de Mark teria impresso todas as variações individualmente. Em vez disso, eu queria usar sua resposta para mover / renomear vários arquivos. Para garantir que a saída correspondesse ao formato que mv
normalmente espera ( mv oldfilename newfilename
), escapei da segunda ocorrência de expansão de chaves, para que não fosse avaliada até depois que o eval
comando inicial fosse executado.
Como a saída acima apareceu como o esperado, pude executar o seguinte comando:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Muito obrigado a Mark por sua resposta original. Faça um voto positivo na resposta dele se você gostar do que a resposta dele me permitiu fazer :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
, é melhor usar a forma abreviada do que enumerar todos os 27 valores.