A razão pela qual isso não funciona é porque bash
executa a substituição de chaves antes do comando (o Manual de Referência do Bash tem algumas informações sobre isso). A substituição não é executada até que a expansão da chave já tenha ocorrido.
A única maneira de fazer isso é usando eval
, mas não faça isso neste caso, pois você permitirá a execução arbitrária de comandos.
Em vez disso, você precisa procurar outro método. Isso deve produzir a saída que você procura:
for file in *; do
printf '%s ' "foo/bar/$file"
done; echo