você está aqui: Home  → Arquivo de Mensagens

Bash - expansão de caracteres

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 26 de Julho de 2000

Muitas vezes é necessário, em uma linha de comando, repetirem-se palavras quase na íntegra, modificando-se somente um ou outro caracter. Por exemplo:

  # cp ~/.emacs ~/.emacs.bak=

Ou, pior,

  # cp /mnt/usr/share/emacs/20.7/etc/sex.6 /usr/share/emacs/20.7/etc/sex.6

(para alguém que tenha perdido o arquivo, por exemplo)

Bem, para os preguiçosos, mesmo o primeiro exemplo é demais. Então, tentando minimizar ao máximo a quantidade de caracteres digitados, podemos usar um pequeno truque de bash:

  # cp ~/.emacs{,.bak}=

O que isso faz? A palavra que contem as chaves é expandida em duas palavras (neste caso, podem ser mais), separadas por espaço: a primeira contém "~/.emacs" mais o que está entre chaves, antes da primeira vírgula= (nada); a segunda contém "~/.emacs" mais o que está depois da vírgula= (".bak"). O resultado final, expandido pelo bash, seria

  # cp ~/.emacs ~/.emacs.bak=

Outro exemplo seria:

  # cat arq{1,2,3} > arq.final

Ou seja, o equivalente a

  # cat arq1 arq2 arq3 > arq.final

Isso funciona também no meio de da palavra, ou mesmo no começo:

  # cat /home/{rbp,queiroz,rms,torvalds}/.signature
  # diff {/home/rbp/.,/etc/}bashrc

E, finalmente (e um pouco mais confuso), pode haver chaves dentro de chaves:

  # less /usr/doc/{emacs-20.7/{NEWS,README},ed-0.2/NEWS,gnupg-1.0.1/{README,COPYING}}

Que seria expandido para:

  # less /usr/doc/emacs-20.7/NEWS /usr/doc/emacs-20.7/README /usr/doc/ed-0.2/NEWS /usr/doc/gnupg-1.0.1/README /usr/doc/gnupg-1.0.1/COPYING


 

 

Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script