Você pode usar essa sintaxe que não exige que o $
seja ignorado, ao contrário da tentativa do documento aqui.
#!/bin/bash
bash -c '
IMPORTS=$(find /tmp/foo -type f -name .project)
for item in ${IMPORTS[*]};
do
IMPORT="$(dirname $item)/"
echo $IMPORT
done
'
Aqui está uma maneira mais robusta (graças ao comentário sugerido por Gilles), que tem a vantagem de permitir que aspas simples estejam presentes no script incorporado:
#!/bin/bash
bash <<"%EOF%"
IMPORTS=$(find /tmp/foo -type f -name .project)
for item in ${IMPORTS[*]};
do
IMPORT="$(dirname $item)/"
echo $IMPORT
done
%EOF%
Nota: não há como impedir que alguém use um shell diferente daquele especificado com o shebang. Escrever um script portátil (ou seja, POSIX) não garante que funcionará com /bin/sh
em todas as plataformas, pois o padrão não exige que o shell POSIX use esse caminho.