Os erros estão aqui:
=: cannot open '=' (No such file or directory)
Algo está tentando abrir um arquivo chamado = , mas não existe.
/tmp/script.sh: line 9: : No such file or directory
Isso geralmente teria o nome do arquivo antes dos últimos dois pontos, mas como está vazio, parece que algo está tentando abrir um arquivo com um nome vazio.
Considere a linha:
file = "/tmp/countries.properties"
Isso executa o comando file com os argumentos = e /tmp/countries.properties . (O shell não importa quais são os argumentos para um comando, pode haver algo que use o sinal de igual como argumento.) Agora, file simplesmente acontece de ser um programa usado para identificar os tipos de arquivos , e faz exatamente isso. Primeiro, tente abrir = , resultando em um erro e, em seguida, abrindo /tmp/countries.properties , informando o que é:
/tmp/countries.properties: ASCII text
O outro No such file or directory vem do redirecionamento < $file . Como a variável não recebe um valor, o redirecionamento não funcionará.
Uma atribuição no shell requer que não haja nenhum espaço em branco ao redor do sinal = , portanto:
file=/tmp/countries.properties
Além disso, aqui:
sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g'
As variáveis não são expandidas entre aspas simples, e você tem aquelas ao redor de todo o segundo argumento, então sed obterá literal ${key} e não o conteúdo da variável.
Encerre as aspas simples para expandir as variáveis ou apenas use aspas duplas para toda a string:
sed -ie 's/:iso=>"'${key}'"/:iso=>"'${key}'",:alpha_iso=>"'${value}'"/g'
sed -ie "s/:iso=>\"${key}\"/:iso=>\"${key}\",:alpha_iso=>\"${value}\"/g"