Em bash , os nomes de variáveis só podem ser feitos com caracteres alfanuméricos de um byte ou sublinhados (e o primeiro caractere não pode ser um dígito).
Portanto, www.example.com_token não é um nome de variável válido, www.example.com_token="asdfasdf" não é reconhecido como uma atribuição, mas como um comando simples.
Em ksh93 (o shell bash tenta emular), www.example.com_token="asdfasdf" só funcionaria se você definisse a variável www como uma variável composta :
$ compound www
$ www.example.com_token="asdfasdf"
$ typeset -p www
typeset -C www=(example=(com_token=asdfasdf))
$ printf '%s\n' "${www.example.com_token}"
asdfasdf
Em bash , você poderia usar uma variável de matriz associativa (um desses recursos ksh93 copiados por bash ):
typeset -A token
token[www.example.com]=asdfasdf
printf '%s\n' "${token[www.example.com]}"
(essa sintaxe também deve funcionar em ksh93 e zsh ).
Se você não puder modificar esse config.txt para que seja compatível com a sintaxe do seu shell, você poderá editá-lo imediatamente antes de avaliar. Curtir (com ksh93 , bash ou zsh ):
typeset -A token
. <(sed 's/^\([^=]*\)_token=/token[]=/' < config.txt)
Para transformar o x.y_token= em token[x.y]= ou:
. <(sed -e :1 -e 's/^\([^=]*\)\.\(.*=\)/_/; t1' < config.txt)
Para substituir todos os . restantes do = por _ .
Mas cuidado, pois qualquer um pode fazer substituições em locais onde não é esperado, como em:
foo.bar_token="multi
line .x. _token assignment (=)"
Ou se o arquivo não contiver apenas atribuições.
Agora, se o config.txt não tiver a sintaxe de shell adequada, você deve procurar outros problemas de sintaxe, como linhas contendo foo="price: $12" ou foo="x 'y' z" , em que $ , ' são operadores especiais em a sintaxe da shell.