find: O que significa para “-a” ter precedência mais alta que “-o”? [duplicado]

1

A página man do gnu encontra estados:

Please note that -a when specified implicitly (for example by two tests appearing without an explicit operator between them) or explicitly has higher precedence than -o. This means that
find . -name afile -o -name bfile -print
will never print afile.

Suponho que a expressão acima seja igual a:

find . -name afile -o -name bfile -a -print

Minha pergunta é: como esta expressão funciona? e por que afile nunca será impresso?

    
por the_velour_fog 06.08.2016 / 10:52

2 respostas

3

Os operadores -and / -a são o operador AND lógico. Eles não precisam ser especificados, pois estão implícitos na justaposição de duas expressões.

E sim, não será possível imprimir afile enquanto você estiver usando find . -name afile -o -name bfile -a -print , pois o operador AND tem uma precedência maior do que OU operador -or / %código%. Se você quiser que -o seja impresso, você tem duas opções:

Primeira Opção:

Como @malo mencionado, executando afile você pode ter o find . \( -name afile -o -name bfile \) -a -print impresso, pois os parênteses têm a maior precedência nos comandos Localizar nas versões GNU e BSD.

Segunda Opção:

Por não passar a opção afile . Portanto, será -print e a razão é que não há nada com precedência maior que find . -name afile -o -name bfile .

    
por 06.08.2016 / 12:06
1

Você deve usar parênteses, pois eles têm precedência maior que -a :

find . \( -name afile -o -name bfile \) -a -print
    
por 06.08.2016 / 10:57

Tags