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 %.