A expansão da chave é uma técnica útil para gerar listas de strings que podem ser usadas em scripts e aliases e na linha de comando do Linux. Economize tempo e evite erros digitando menos.
Expansão de cinta
Antes do shell bash Executa um comando Em uma janela de terminais ou uma linha em um script, ele verifica se precisa executar qualquer substituição no comando. Os nomes variáveis são substituídos por seus valores, os aliases são substituídos pelos comandos que são taquigrafia e qualquer expansão é executada. A expansão da chave é uma forma de expansão suportada pelo bash.
A expansão de cinta está disponível em conchas modernas, mas pode estar faltando de algumas conchas antigas. Se você for usar a expansão de cinta em scripts, certifique-se de invocar uma casca que suporta a expansão de cinta, como o bash:
Nós estaremos usando bash para nossos exemplos.
Gerar listas de strings pode parecer mais uma novidade do que um benefício, mas oferece alguma funcionalidade que pode economizar tempo e pressionamentos de tecla. Muitas vezes, pode fornecer uma solução simples e elegante para um problema ou requisito.
Expansões simples.
Uma expansão de cinta está contida entre um par de chaves "{}". Pode ser uma lista de itens separados por vírgulas ou especificador de intervalo. Espaços não são permitidos dentro das chaves, a menos que você tenha enrolado a string nas aspas "
"
. "
Para uma lista separada por vírgula, o processo de expansão leva cada elemento por sua vez e passa para o comando de chamada. Neste exemplo, é
eco
isso simplesmente
imprime-os na janela do terminal
. Note que as vírgulas são ignoradas.
Echo {um, dois, três, quatro}
Uma lista pode ser palavras ou dígitos.
Echo {1,2,3,4}
A ordem dos elementos da lista é completamente arbitrária.
Echo (4,2,3,1)
Um intervalo de expansão tem um comando e um caractere final conectado com dois períodos "
..
"Sem espaço em branco. Todos os elementos de lista ausentes são fornecidos automaticamente pela expansão para que o intervalo inteiro do caractere de inicialização 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 eles sejam voltados para trás. Isso gerará uma lista de cinco para baixo para um.
Echo {5..1}
Os intervalos podem incluir números negativos.
Echo {4 ..- 4}
Como nós anteriormente apontamos, um intervalo tem um começo e um fim personagem . Não precisa ser um número. Pode ser uma carta.
echo {q..v}
As letras podem correr para trás também.
echo {f..a}
Usando a expansão de cinta com loops
Você pode usar a expansão de cinta com intervalos em loops em scripts.
para eu em {3..7}
Faz
Echo $ I.
feito
As faixas de expansão de cinta permitem que você use caracteres como a variável de loop.
para eu em {m..Q}
Faz
Echo $ I.
feito
Loops são geralmente usados em scripts, mas não há nada para impedi-lo de digitá-los na linha de comando para ver o que acontecerá.
para eu em {3..7}; fazer eco $ i; feito
para eu em {m..Q}; fazer eco $ i; feito
Concatenação e aninhamento
Duas expansões adjacentes não agem de forma independente uma após a outra. Eles interoperam. Cada elemento na primeira expansão é agido por cada elemento na segunda expansão.
echo {q..v} {1..3}
Expansões também podem ser aninhadas. Uma expansão aninhada atuará no elemento imediatamente a precedendo.
Echo {Part-1, Part-2 {A, B, C, D}, Part-3}
Você também pode aninhar expansões criando uma lista delimitada por vírgula de expansões de alcance.
echo {{5..0}, {1..5}}
Preâmbulo e PostScript
Você pode colocar texto antes e depois de uma expansão de suporte para ter esse texto 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 cinta é chamado de PostScript.
Este comando usa um preâmbulo.
Echo Capítulo {1..3}
Este exemplo usa um PostScript:
Echo {Conteúdo, papel, bilbiografia} .md
E este comando usa ambos.
Capítulo Echo - {1..4} .md
Expandindo nomes e diretórios de arquivos
Como você provavelmente adivinhou agora, um dos principais usos das expansões de cinta é criar nomes de arquivo e diretório que possam ser passados para outros comandos. Nós estamos usando
eco
como uma maneira conveniente de ver exatamente o que acontece quando uma expansão é acionada. Você pode substituir qualquer comando que leva nomes de arquivos ou nomes de diretório como entrada e use a expansão de cinta com ele.
Para rapidamente
Crie alguns arquivos
, usar
tocar
:
Toque em File- {1..4} .txt
ls * .txt
Se você tiver muitos arquivos com o mesmo nome de base, mas diferentes extensões de arquivo e deseja executar uma operação em um subconjunto deles, as expansões de cinta podem ajudar. Aqui, estamos comprimindo um subconjunto de arquivos que têm "programa" como o nome de basen em um arquivo zip chamado "source-code.zip".
Diretórios de desenvolvimento contêm muitos arquivos que terão o mesmo nome de basen como seu programa principal. Normalmente, você não quer fazer backup ou distribuir arquivos como arquivos de objeto ".o". Esta é uma maneira legal de incluir apenas os tipos de juros de arquivo.
Programa de código de origem Zip {.c, .h, .css}
Este comando fará uma cópia de um arquivo e anexará ".bak" para ele, fazendo uma cópia de backup do arquivo original. Um ponto interessante para observação é 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 / NOVO / PROG-1.C.BAK
Para executar alguma ação em dois arquivos em diretórios diferentes, podemos usar uma expansão de cinta no caminho para os arquivos.
Neste exemplo, o diretório "Brace" contém dois subdiretórios, um chamado "novo" e um chamado "velho". Eles contêm versões diferentes do mesmo conjunto de arquivos de código-fonte. Nós vamos usar o.
dif.
programa para ver as diferenças entre as duas versões de "Prog-1.c".
diff Brace / {novo, velho} /prog-1.c
Se você tiver um esqueleto padrão de diretórios que você precisa criar no início de um projeto, poderá criá-los rapidamente usando a expansão de cinta. o
mkdir.
-p.
Opção (pai)
cria todos os diretórios parentais perdidos
quando um diretório filho é criado.
mkdir -p {fonte, construir, man, ajuda {/ páginas, / yelp, / images}}
Árvore
Você pode usar a expansão de cinta com
wget.
para
Baixe vários arquivos
.
Nesse comando, vamos baixar arquivos de dois diretórios, chamados "test1" e "test2". Cada diretório detém dois arquivos chamados "Picture1" e "Imagem2".
wget https://www.url-of-your-choice.com/test_test_test_test_Test_Test_
![]()
Listando os arquivos mostra os arquivos que foram recuperados e como
wget.Renomeia arquivos para evitar confrontos de nome com arquivos existentes.LS Picture *. *
![]()
Abraçar a cinta.
Parece que a expansão da chave é outra de Segredos mais bem guardados do Linux . Muitas pessoas me dizem que nunca ouviram falar de expansão de cinta, enquanto outros me informam que é um dos seus truques de linha de comando favoritos.
Dê uma tentativa e só pode encontrar o seu caminho em seu conjunto de truques de linha de comando.