Palavra de aviso: Sou relativamente novo no scripting BASH, por isso qualquer conselho sobre o meu script hacky é apreciado.
Eu tenho um problema estranho, no meu código eu coletei um monte de strings de erro de um arquivo em um array, e um segundo array armazena a contagem dos erros no mesmo índice (eu fiz isso dada a falta de Arrays 2D, e realmente não queriam abordar a construção de uma matriz).
Ao enviar o código, eu uso esta linha:
for ((i=0; i<${#NAME_ARRAY[@]}; i++)); do
echo "Error: ${NAME_ARRAY[$i]} x ${COUNT_ARRAY[$i]}"
done
Neste caso estou testando com dois arquivos separados, se eu rodar no arquivo um eu recebo esta saída:
Error: Exception: unknown/unregistered file format : x 72982
Isso é legal, funciona bem e exatamente como esperado. Eu sei que há apenas um erro ("Exceção: desconhecido / formato de arquivo não registrado:") no arquivo de log enorme, e que aparece 72982 vezes.
Mas no meu outro caso, recebo este resultado:
x 66964xception: Some kind of disk I/O error occurred
Aqui é onde eu estou completamente perdido. Se eu imprimir $ {NAME_ARRAY [$ i]} individualmente, recebo "Algum tipo de erro de E / S de disco" perfeitamente bem. Da mesma forma, se eu imprimir $ {COUNT_ARRAY [$ i]} eu mesmo obtenho "66964" ... mas quando eu coloco ambos em uma string, o número COUNT_ARRAY é lançado no início da minha string e sobrescreve o "Erro: "parte.
Achando que eu poderia ser um pouco inteligente e muito hacky, decidi fazer isso:
echo -n "Error: ${NAME_ARRAY[$i]}"
echo " x ${COUNT_ARRAY[$i]}"
Minha mente amadora pensou que isso separaria as duas saídas (no caso de qualquer tipo de problema de segmentação / prioridade), mas, infelizmente, ainda obtenho exatamente o mesmo resultado.
Estou sentindo falta de algo extraordinariamente óbvio? Ou os meus ecos estão fazendo algo estranho?
Eu também testei apenas usando printf em vez de echo e a mesma coisa acontece. Poderia haver algum tipo de problema de codificação de caracteres que está se acumulando ao imprimir no console?