Incrementar a última parte do nome de uma variável

1

Acabei de me inscrever aqui.

Estou trabalhando em um script que coloca dados em uma matriz em variáveis separadas.

Exemplo:

for((i=0; i < Counter; i++)); do
    while read -r Parmfilesjobid; do
        IFS=$'\n' read -d '' -r -a  "job$i" < ${Parmfilesjobid[$i]}
    done <<< "${Parmfilesjobid}" 
done

O contador é uma variável separada porque o número de vezes que o loop for deve ser diferente.

Como $ I é incrementado todas as vezes, estou tentando descobrir como posso transformar o trabalho $ i em job0, job1, job2.

Isto porque cada trabalho $ i contém valores separados.

Quando eu uso:

echo ${job1[@]}
echo ${job2[@]}
echo ${job3[@]}

Eu posso obter a saída correta por trabalho $ i (job0, job1, job2)

Mas eu quero que o bash converta o job $ i em job0, job1, job2 para que eu possa usá-los em outro loop como variáveis separadas.

    
por Robin Slijfer 16.06.2017 / 10:36

2 respostas

1

read -r "job$i" < ...

Isso deve funcionar se i=3 e read definir job3 .

No entanto, seus loops parecem um pouco:

for((i=0; i < Counter; i++)); do
    while read -r Parmfilesjobid; do
        IFS=$'\n' read -d '' -r -a  "job$i" < ${Parmfilesjobid[$i]}

O while read colocará apenas um valor em Parmfilesjobid , por exemplo, ${Parmfilesjobid[1]} será desfeito. (É claro que um acesso escalar como $var é o mesmo que ${var[0]} , então se você tivesse Parmfilesjobid definido como uma matriz antes, você pode ter valores com outros índices também, mas não está usando o valor de read exceto quando i=0 .

Você também está usando Parmfilesjobid como entrada para o loop while read... e como a variável usada por read , o que é um pouco confuso e significa que as últimas iterações do for daria while o último Parmfilesjobid lido na iteração anterior como entrada. Isso parece um pouco estranho.

Como não vejo sua opinião, não sei exatamente o que você quer fazer aqui. Mas suspeito que algo como isto pode estar mais perto:

i=0
while read -r filename ; do
    IFS=$'\n' read -d '' -r -a  "job$i" < "$filename"
    let i++
done <<< "${var_with_filenames}"
    
por 16.06.2017 / 11:12
0

Obrigado pela resposta rápida!

Vou tentar explicar o que é a entrada:

Eu tenho alguns arquivos que contêm alguns parâmetros. Esses parâmetros são diferentes para cada arquivo, mas eles sempre contêm o mesmo tipo de dados. Ele contém um ID do cliente, ID do pedido e ID do grupo que, quando combinados, formam um caminho UNC.

Até o momento, o script localiza esses arquivos e os coloca em uma matriz, essa matriz é usada no loop for da primeira postagem para extrair os dados de cada arquivo separado e colocá-los em uma matriz diferente (a tarefa $ i ). Depois disso, estou preso.

Eu posso repetir cada trabalho individualmente e obter os dados contidos neles com: echo $job0 echo job1 echo job2

Eu preciso encontrar uma maneira de obter outro loop para trabalhar com o job $ i, porque eu preciso de cada job $ i para executar o loop for para extrair os dados e transformá-los em um caminho.

    
por 19.06.2017 / 10:45