Exemplos
Recentemente, encontrei exemplos de uso de pares de chaves {}
, sem nada entre as chaves de abertura e fechamento, como argumentos para comandos e até para suas opções:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Sem documentação
Meu problema é que não consigo encontrar uma documentação no Manual do GNU Bash que descreva o uso {}
desse contexto, como nos exemplos acima.
Eu não acho que seja uma expansão de parâmetro , porque um cifrão deve preceder os colchetes em uma expansão de parâmetro como em ${}
.
Também não pode ser uma expansão de chave , porque assume a forma de {x..y[..incr]}
, onde x
e y
não é opcional.
Também não pode ser um agrupamento de comandos , porque {}
é usado como argumentos.
Questões
O que um par de chaves anexas
{}
significa, em geral, como argumento para qualquer comando que a aceite?Onde posso encontrar uma documentação que descreva o uso de
{}
como argumentos?
{}
- o que significatargets
agir, com ofind
comando, é remover /rm
encontrar arquivos.Respostas:
Esses aparelhos encaracolados são deixados sozinhos pelo bash; eles pertencem
find
exargs
, respectivamente, e são descritos em suas páginas de manual.man find
man xargs
Edit: e aqui POR QUE o bash ignora os chavetas:
man bash
Para enfatizar: a lista deve ser finalizada com uma nova linha ou ponto e vírgula .
fonte
man xargs
nem se deu ao trabalho de explicar o que{}
realmente significa, nem o autor redirecionou (sem trocadilhos) o leitor para a explicação-exec
na página do manualfind
.xargs -Iab echo ab
; é uma escolha puramente arbitrária.-I
, agora entendo o que essa opção realmente faz. Sim,{}
é arbitrário, como você disse. Eu só estava confuso com a explicaçãoIf the replace-str argument is missing, the effect is the same as -I{}
. Se-I
sem argumento fosse o mesmo que-I{}
, entãocat foo | xargs -I echo {}
produziria o mesmo resultado que em execuçãocat foo | xargs -I{} echo {}
. No entanto, eles não são os mesmos. O primeiro é um erro, e o que mais me confundiu foi a mensagem de erroxargs: {}: No such file or directory
, mas isso se deve apenas à implementação.-I
(I maiúsculo) não pode ser executado sem um argumento. O argumento para-I
eraecho
. Esta é a principal diferença entre-I
e-i
(ea razão -i é obsoleto, uma vez que as opções com argumentos não obrigatórios são incomuns e confundindo)