Entendo o que é expansão de braçadeira , mas não sei qual a melhor forma de usá-la.
Quando você o usa?
Por favor, ensine-me alguns exemplos convenientes e notáveis, se você tiver sua própria dica.
Entendo o que é expansão de braçadeira , mas não sei qual a melhor forma de usá-la.
Quando você o usa?
Por favor, ensine-me alguns exemplos convenientes e notáveis, se você tiver sua própria dica.
A expansão de chaves é muito útil se você tiver nomes de caminhos longos. Eu o uso como uma maneira rápida de fazer backup de um arquivo :
cp /a/really/long/path/to/some/file.txt{,.bak}
irá copiar /a/really/long/path/to/some/file.txt
para/a/really/long/path/to/some/file.txt.bak
Você também pode usá-lo em uma sequência . Certa vez, fiz isso para baixar muitas páginas da Web:
wget http://domain.com/book/page{1..5}.html
ou
for i in {1..100}
do
#do something 100 times
done
program -f file1 -f file2 -f file3
, você pode fazerprogram "-f file"{1..3}
program
recebe três palavras:"-f file1" "-f file2" "-f file3"
, em vez de 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
loop é um pouco inútil, pois você pode escreverfor ((i=1; i<=100; i++))
e é mais eficiente.A expansão de chaves é muito útil ao criar grandes estruturas de diretório:
Isso lhe dará
Você poderia dar um passo adiante e colocar a expansão de chaves na expansão de chaves:
Isso fornecerá a mesma estrutura de diretórios do exemplo acima.
fonte
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) não serve para nada. Você poderia ter feito isso:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.subdir1
esubdir2
no sentido não literal. Substituirsubdir1
comcat
esubdir2
comdog
, por exemplo.Uso quando quero reduzir a digitação:
Outro exemplo:
fonte
Eu o uso para comparar a saída de teste real com a saída de teste desejada durante o desenvolvimento. Se o teste nº 41 falhar, é fácil ver qual a diferença entre a saída de teste (no arquivo tests.output / 041) e a saída desejada (no arquivo tests.out / 041):
fonte
Alguns casos frequentes para mim são:
Para renomear:
ou
ou
(Embora seja menos complicado usar o controle de versão nas duas últimas tarefas).
Para comparar (já mencionado):
fonte
Existem várias ótimas respostas aqui, mas nenhuma delas menciona quando não usar expansão de chaves. Como os outros respondentes, uso bastante a expansão entre chaves na linha de comando. Também o uso em meus aliases e funções, pois posso esperar um shell inteligente.
Eu não o uso nos meus scripts de shell (a menos que haja outra razão pela qual os scripts sejam bash ou zsh, embora nesses casos seja melhor atualizar para uma linguagem de script "real" como
perl
oupython
). A expansão de chaves não é portátil, pois não está no padrão de shell POSIX. Mesmo se ele funciona em seus/bin/sh
- shebang scripts shell ed, não irá funcionar em sistemas com mais despojado/bin/sh
conchas (por exemplodash
).No caso de uma diferença de um único dígito, você não precisa de expansão de chaves; uma classe de personagem será suficiente:
Bashism:
Portátil:
fonte
file{1,2}
sempre se expandirá parafile1 file2
, enquanto sefile[12]
expande apenas para os nomes de arquivos existentes: ou seja, sefile1
existe, masfile2
não existe , sefile[12]
expandefile1
apenas para . A[]
expansão é realmente uma versão restrita da?
expansão (e elas são chamadas de "expansões de nome de caminho").