pat="'*.ab' -o -name '*.bc'"
find $path -type f $open -name $pat $close
Isso não faz o que você deseja: as aspas dentro da variável pat
não são consideradas aspas, mas sim caracteres literais. Depois que $pat
for expandido, será o wordsplit, resultando nas palavras '*.ab'
, -o
, -name
e '*.bc'
, com aspas simples ainda intactas. Então, a menos que você tenha nomes de arquivos com aspas simples dentro deles, isso não corresponderá.
path=path
Isso define a variável path
como a string literal path
, mas suponho que esse seja apenas um espaço reservado.
open="\("
close="\)"
Eles colocam barras invertidas literais nas variáveis e find
provavelmente deve reclamar, pois recebe um argumento de \(
. Basta citar os parênteses uma vez, então open="("
ou open=\(
Se você precisar criar uma lista de expressões para find
, use um shell com matrizes (Bash ou quase qualquer coisa, exceto sh
):
args=()
args+=( -name "*.ab" )
args+=( -or -name "*.bc" )
find ... \( "${args[@]}" \)
Quebra a construção da matriz em um loop, conforme necessário.