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.