Exibir expansão de chave ZSH

2

Existe uma maneira de mostrar a versão expandida de uma declaração de expansão de chave?

Por exemplo, eu tenho:

$ bundle exec rake db:{drop,create,migrate}

A versão expandida expande para isso?

$ bundle exec rake db:drop
$ bundle exec rake db:create
$ bundle exec rake db:migrate
    
por Sandro 22.08.2014 / 16:54

3 respostas

5

Bem, você pode sempre fazer

~  for i (drop create migrate) echo bundle exec rake db:$i
bundle exec rake db:drop
bundle exec rake db:create
bundle exec rake db:migrate

Ou

~ echo bundle exec rake db:{drop,create,migrate}
bundle exec rake db:drop db:create db:migrate
    
por 22.08.2014 / 16:59
3

Para mostrar como essas 3 linhas, você precisaria:

$ print -rl 'bundle exec rake db:'{drop,create,migrate}
bundle exec rake db:drop
bundle exec rake db:create
bundle exec rake db:migrate

x{a,b}y cria 2 argumentos em que {a,b} é substituído por a no primeiro e b no segundo.

Se quisesse que o acima fosse executado, você poderia canalizá-lo para sh (ou zsh , embora não haja código zsh específico), ou você poderia escrever:

eval 'bundle exec rake db:'{drop,create,migrate}$'\n'
    
por 22.08.2014 / 17:11
2

Não, é expandido para:

bundle exec rake db:drop db:create db:migrate

Da documentação de zsh , seção de expansão de chaves :

A string of the form ‘foo{xx,yy,zz}bar’ is expanded to the individual words ‘fooxxbar’, ‘fooyybar’ and ‘foozzbar’. Left-to-right order is preserved. This construct may be nested. Commas may be quoted in order to include them literally in a word.

    
por 22.08.2014 / 17:17

Tags