Pesquisar este blog

quarta-feira, 12 de maio de 2021

Como usar a expansão das chaves no Bash Shell do Linux

 

Expansão da chaves no BASH

Expansões Simples

Uma expansão de chave está contida entre um par de chaves “{}”. Pode ser uma lista de itens separados por vírgulas ou um especificador de intervalo. Espaços não são permitidos entre colchetes, a menos que você tenha colocado a string entre aspas “ ".”

Para uma lista separada por vírgulas, o processo de expansão pega cada elemento por vez e passa para o comando de chamada. Neste exemplo, ele echo simplesmente os imprime na janela do terminal . Observe que as vírgulas são ignoradas.

echo {um, dois, três, quatro}

Uma lista pode ser composta por palavras ou dígitos.

echo {1,2,3,4}

A ordem dos elementos da lista é completamente arbitrária.

eco (4,2,3,1)

Um intervalo de expansão tem um caractere inicial e um caractere final conectados com dois pontos ” ..” sem nenhum espaço em branco. Todos os elementos da lista que faltam são fornecidos automaticamente pela expansão, de forma que todo o intervalo do caractere inicial ao caractere final seja criado.

Isso imprimirá os dígitos de 1 a 10.

echo {1..10}

A numeração é arbitrária. Não precisa começar em um.

echo {3..12}

Os intervalos podem ser especificados para que sejam executados ao contrário. Isso irá gerar uma lista de cinco a um.

echo {5..1}

Os intervalos podem incluir números negativos.

echo {4 ..- 4}

Como apontamos anteriormente, um intervalo tem um caractere inicial e um caractere final Não precisa ser um número. Pode ser uma carta.

echo {q..v}

As letras também podem correr ao contrário.

echo {f..a}

Usando a Expansão de Brace com Loops

Você pode usar a expansão de chaves com intervalos em loops em scripts.

para mim em {3..7}
do
   echo $ i
feito

Os intervalos de expansão de chaves permitem que você use caracteres como a variável de loop.

para i em {m..q}
do
   echo $ i
feito

Os loops são geralmente usados ​​em scripts, mas não há nada que o impeça de digitá-los na linha de comando para ver o que acontecerá.

para i em {3..7}; faça echo $ i; feito

para i em {m..q}; faça echo $ i; feito

Concatenando e aninhando

Duas expansões adjacentes não agem independentemente uma após a outra. Eles interoperam. Cada elemento na primeira expansão é influenciado por cada elemento na segunda expansão.

echo {q..v} {1..3}

As expansões também podem ser aninhadas. Uma expansão aninhada atuará no elemento imediatamente anterior.

echo {parte 1, parte 2 {a, b, c, d}, parte 3}

Você também pode aninhar expansões criando uma lista delimitada por vírgulas de expansões de intervalo.

echo {{5..0}, {1..5}}

Preâmbulo e PostScript

Você pode colocar o texto antes e depois de uma expansão de chave para que esse texto seja incluído nos resultados da expansão. O texto colocado na frente de uma expansão é chamado de preâmbulo, enquanto o texto colocado atrás de uma expansão de colchete é chamado de pós-escrito.

Este comando usa um preâmbulo.

capítulo de eco {1..3}

Este exemplo usa um postscript:

echo {conteúdo, artigo, bilbiografia} .md

E este comando usa ambos.

capítulo de eco- {1..4} .md

Expandindo nomes de arquivos e diretórios

Como você provavelmente já deve ter adivinhado, um dos principais usos das expansões de chaves é criar nomes de arquivos e diretórios que podem ser passados ​​para outros comandos. Temos usado echouma maneira conveniente de ver exatamente o que acontece quando uma expansão é disparada. Você pode substituir qualquer comando que receba nomes de arquivos ou diretórios como entrada e usar a expansão de chaves com ele.

Para criar alguns arquivos rapidamente , use touch:

toque em arquivo- {1..4} .txt
ls * .txt

Se você tiver muitos arquivos com o mesmo nome de base, mas com extensões de arquivo diferentes, e quiser realizar uma operação em um subconjunto deles, as expansões de chaves podem ajudar. Aqui, estamos compactando um subconjunto de arquivos que têm “programa” como o nome de base em um arquivo ZIP chamado “código-fonte.zip”.

Os diretórios de desenvolvimento contêm muitos arquivos que terão o mesmo nome de base do seu programa principal. Normalmente, você não deseja fazer backup ou distribuir arquivos como arquivos de objeto “.o”. Esta é uma maneira interessante de incluir apenas os tipos de arquivo de interesse.

programa de código-fonte zip {.c, .h, .css}

Este comando fará uma cópia de um arquivo e anexará “.bak” a ele, fazendo uma cópia de backup do arquivo original. Um ponto interessante a notar é que a expansão da chave contém uma lista separada por vírgulas, mas o primeiro elemento está vazio. Se não tivéssemos incluído a vírgula, a expansão não teria ocorrido.

cp brace / new / prog-1.c {,. bak}
ls brace / new / prog-1.c.bak

Para realizar alguma ação em dois arquivos em diretórios diferentes, podemos usar uma expansão de chave no caminho para os arquivos.

Neste exemplo, o diretório “brace” contém dois subdiretórios, um denominado “novo” e outro denominado “antigo”. Eles contêm versões diferentes do mesmo conjunto de arquivos de código-fonte. Usaremos o diffprograma para ver as diferenças entre as duas versões de “prog-1.c.”

chave diferencial / {novo, antigo} /prog-1.c

Se você tiver um esqueleto padrão de diretórios que precisa ser criado no início de um projeto, poderá criá-los rapidamente usando a expansão de chaves. A  mkdir -popção (pai) cria qualquer diretório pai ausente quando um diretório filho é criado.

mkdir -p {source, build, man, help {/ pages, / yelp, / images}}
árvore

Você pode usar a expansão de suporte  wgetpara baixar vários arquivos .

Neste comando, vamos baixar arquivos de dois diretórios, chamados “test1” e “test2.” Cada diretório contém dois arquivos chamados “imagem1” e “imagem2”.

wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg

Listar os arquivos mostra os arquivos que foram recuperados e como os wget renomeia para evitar conflitos de nome com os arquivos existentes.

ls imagem *. *


Autor: @thegurkha

Retirado de: https://www.howtogeek.com/725657/how-to-use-brace-expansion-in-linuxs-bash-shell/

Em: 12/05/2021


Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.