O problema são as aspas simples. As variáveis não são expandidas entre aspas simples (de man bash
):
Enclosing characters in single quotes preserves the literal value of each character within the quotes.
Se você quiser usar uma variável, você precisa de aspas duplas. Para ilustrar:
$ foo="bar"
$ echo '$foo'
$foo
$ echo "$foo"
bar
Então, no seu caso, você quer algo como:
for i in $( find -E . -iregex ".*\.$varExtension") ; do
Ou, melhor, porque o acima não pode lidar com nomes de arquivos estranhos :
find -E . -iregex ".*\.$varExtension" -print0 | while IFS= read -r -d '' i; do
Ou, esqueça o loop e tenha find
para fazer o trabalho para você:
find -E . -iregex ".*\.$varExtension" -exec something {} \;