Como @njsg já disse, o problema é causado por find
, não pelo shell: As aspas duplas que você está usando já estão protegendo sua expressão do shell; é passado para find
não modificado.
O problema é que find
trata o argumento como -name
e -iname
como um padrão. A única maneira de suprimir isso seria usar uma opção find
que não trata seu argumento como um padrão. Mas find
não tem tal coisa, de acordo com a minha página de manual, então o que você quer não pode ser feito. O melhor que você pode fazer é aprimorar seu script para escapar dos colchetes automaticamente, antes de passá-los para find
. A seguinte substituição sed
de aparência engraçada fará isso por você:
echo "foo [bar]" | sed 's/[][]/\&/g'
imprimirá: foo \[bar\]