Você precisa de aspas duplas na substituição do comando, caso contrário, o shell executará a divisão de campo com o resultado da substituição do comando:
$ env "$(echo 'VALUE="this is a test"')" ./somescript.sh
"this is a test"
Para a leitura de env
do arquivo, você deve permitir que o shell execute a divisão de campo, mas defina IFS
apenas para nova linha, para que seu comando não seja interrompido com espaço:
$ IFS='
'
$ env $(cat .vars) ./somescript.sh
Se você quiser ler a partir do arquivo, é melhor que você faça a fonte (também conhecido como ponto ) o arquivo em somescript.sh
:
#!/bin/bash
. .vars
: The rest of script go here