Você precisa usar declare -A em vez de declare -a . Você está claramente usando matrizes associativas com argumentos de cadeia arbitrários como índices, mas declare -a é somente para matrizes indexadas inteiras. arg.txt não avalia para um inteiro válido, daí o seu erro.
Editar
Parece que você está usando bash versão 3. Infelizmente, as matrizes associativas não estão disponíveis até a versão 4. Recomendo que você publique uma versão higienizada do script deploy.sh original com informações pessoais confidenciais removidas para que você possa obter ideias outras pessoas sobre abordagens alternativas.
Editar 2
Só para resumir um pouco de troca no bate-papo:
A maneira mais fácil de executar alguma ação sobre todos os argumentos é apenas iterar sobre eles com um for loop:
for arg; do
scp login1@host1:"$arg" login2@host2:/dest/
done
Lembre-se de aspas duplas de todas as instâncias de "$arg" .
Você não precisa colocar os argumentos em um array sozinho, pois eles já existem no array $@ , que é o que o for usa por padrão quando você não dá um% co_de explícito %.