Na documentação , vejo o uso nos dois sentidos:
find . -type f -exec file '{}' \;
find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \
Na documentação , vejo o uso nos dois sentidos:
find . -type f -exec file '{}' \;
find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \
Respostas:
Para a
bash
concha,'{}'
e{}
são intercambiáveis. Este não é o caso de todas as conchas (comofish
).Colocar o argumento entre aspas simples indica explicitamente que os chavetas devem ser enviadas para
find
. Dependendo do uso, o shell bash às vezes substitui o conteúdo dos colchetes.Como visto abaixo, o bash não substitui colchetes vazios e eles são passados para o comando. Para o
find
comando, isso não importa.fonte
" are interchangeable"
com" are interchangeable in some shells, not in all of them. ALWAYS use the single quotes to make sure they get passed as-is to the find command"
(bons hábitos começa por ter certeza que você use o caminho correto, mesmo se acontecer de você (sempre) estar em um sistema que permite a uma ambígua?)Com quase todos os intérpretes de shell disponíveis, não há absolutamente nenhuma diferença entre
'{}'
e{}
.As aspas simples são normalmente usadas para proteger a cadeia incorporada de ser substituída por outra coisa, por exemplo:
'a b'
é um parâmetro único de três caracteres, sem as aspas que seriam dois parâmetros de caracteres únicos'$b'
é a literalmente o cifrão seguido pela letra b, sem a citação que seria o que a variável b contém e possivelmente nada se não estiver definido'!!'
são pontos de exclamação literais enquanto não estão entre aspas e com algumas conchas interativas, eles se expandem para o último comando colocado na história'*'
é um asterisco literário, sem aspas, seria substituído pela lista de nomes de arquivos não ocultos no diretório atual.Como nem o padrão POSIX nem as conchas tradicionais (
sh
(Bourne),ksh
,bash
,ash
,dash
,zsh
,csh
,tcsh
) expandir{}
para outra coisa, as aspas não são necessários.No entanto, existe um shell exótico, chamado
fish
, que se expande{}
como uma string vazia, por exemplo:Essa é provavelmente a razão pela qual a
find
documentação do GNU sugere proteção{}
contra interpretação com aspas ou barras invertidas.fonte
Para a maioria dos usuários (principalmente aqueles que usam shells POSIX), não há diferença.
De acordo com a seção Exemplo da página de manual do GNU
find
:Eu acho que os autores da página de manual do GNU estão errando por precaução, mas observo que nem todos os exemplos em sua página de manual citam os chavetas. Estes exemplos do GNU oficial encontram documentação também omitem a citação.
Nos exemplos da especificação POSIX / Single UNIX, os colchetes não são citados quando usados com a
-exec
opçãoCom um shell POSIX, a expansão de parâmetros ocorre apenas quando há parâmetros especiais entre chaves - mas não com chaves vazias .
O shell Bash inclui expansão de chaves como um recurso (não portátil), mas esses padrões são expandidos apenas quando uma vírgula ou pontos são incluídos nas chaves . Bash também usa chaves para agrupamento de comando , mas isso não ocorre a menos que haja realmente é um grupo de comandos dentro da cinta.
Finalmente, eu tentei correr
find -exec ls -l {} \;
emsh
,dash
etcsh
, mas nenhuma dessas conchas expandiu o{}
em qualquer outra coisa. Como outros já apontaram, ofish
shell trata{}
especialmente, mas não é um shell POSIX (que seus criadores e usuários consideram uma vantagem). Não faz mal citar os aparelhos, mas os datilógrafos preguiçosos que não usam a casca de peixe não devem se sentir culpados por omiti-los.fonte
'{}'
vez de{}
) para que seu shell envie{}
para o comando find sem interpretá-lo (como mencionado acima por Charles-Duffy, se você usar peixe , ele irá interpretar,{}
mas não'{}'
, então você precisa usá-lo nesse shell (e em vários outros!). Portanto, sempre use'{}'
para evitar ser mordido pela ambiguidade de{}
Isso depende da sintaxe do seu shell. Em caso de dúvida, faça eco!
Rode isto
e isto.
Se eles produzem a mesma saída, a resposta para o seu shell é sim. Como outros observaram, será pelo menos sim na festança e não no peixe. A saída é para o que você deve consultar a página de manual de um determinado comando.
Se você quiser se dar bem, pode até prefixar
echo
uma linha de comando inteira, para ver o comando real , com todos os seus argumentos, que seu shell realmente chamaria. Cuidado, porém, que a lista que compreende o comando mais argumentos é uma verdadeira matriz de seqüências de caracteres, cada uma possivelmente vazia ou com espaço em branco, mas o eco a imprime ambiguamente como uma lista separada por espaço.Como pode ser verificado com este comando de eco um pouco mais detalhado (mostrando argumentos citados por guillemet),
digitando isso na linha de comando,
significa isso para bash:
e isso em peixes:
Como um conselho geral, nunca é demais citar.
fonte