Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

1. Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

Julio
nxdextruto

(usa Linux Mint)

Enviado em 22/12/2022 - 19:35h

Olá, boa noite!

Fiz a função vericaGanhador() onde eu tento percorrer os valores referentes as variaveis l0 l2 l4 e recuperar os valores de algumas posições específicas.

Contudo, quando eu tento recuperar o valor, ele está apresentando o valor resgatado das variaveis $ln e $cl, mas não está apresentando o valor corresponte da "matriz"

Estou encaminhando o código em questão abaixo e uma print o resultado que está sendo apresentado em tela.

#! /usr/bin/env bash

source exibe.sh
source preenche.sh

l0=('0' ' ' ' ' '|' '1' ' ' ' ' '|' '2' ' ' ' ')
l1=('-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-')
l2=('3' ' ' ' ' '|' '4' ' ' ' ' '|' '5' ' ' ' ')
l3=('-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-')
l4=('6' ' ' ' ' '|' '7' ' ' ' ' '|' '8' ' ' ' ')

tab='l0 1
l0 5
l0 9
l2 1
l2 5
l2 9
l4 1
l4 5
l4 9'

function verificaGanhador(){
for ln in l0 l2 l4
do

for cl in 1 5 9
do
#Quero imprimir o valor abaixo em tela.
echo ${ln}[${cl}]
done
done
}


[..]


  


2. Re: Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

stoner
storma

(usa Outra)

Enviado em 22/12/2022 - 22:27h

Tente:

                #Quero imprimir o valor abaixo em tela.
eval "echo \${${ln}[cl]}"



3. Re: Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

stoner
storma

(usa Outra)

Enviado em 22/12/2022 - 22:35h

Nesse outro exemplo, uso somente um array $ll em bash:

ll=('0' ' ' ' ' '|' '1' ' ' ' ' '|' '2' ' ' ' ' 
'-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-'
'3' ' ' ' ' '|' '4' ' ' ' ' '|' '5' ' ' ' '
'-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-'
'6' ' ' ' ' '|' '7' ' ' ' ' '|' '8' ' ' ' ')

#cada linha tem 11 campos, então para mapear o array $ll:

echo ${ll[ ((ln-1)*11)+cl-1 ]}



4. Re: Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 23/12/2022 - 17:58h

Nao entendi exatamente o que deseja, mas, segue um exemplo de como imprimir....
sep='- - - - + - - - + - - -';
string="0\t| 1\t| 2\t\n${sep}\n3\t| 4\t| 5\n${sep}\n6\t| 7\t| 8\t\n"
printf "${string}"
0 | 1 | 2
- - - - + - - - + - - -
3 | 4 | 5
- - - - + - - - + - - -
6 | 7 | 8




______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



5. Re: Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

stoner
storma

(usa Outra)

Enviado em 24/12/2022 - 02:52h


o id -iota que deu dislike para mim é só isso msmo


6. Re: Shell Script - DÚVIDA DE COMO RECUPERAR VALOR DE MATRIZ DE FORMA DINÂMICA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/12/2022 - 05:41h

A resposta mais universal (no sentido de que funciona em qualquer shell) já foi dada pelo nosso colega que sugeriu o uso de eval logo de cara.

Entretanto, o Bash tem um outro meio de conseguir fazer o que foi perguntado originalmente, por meio do comando typseset com a opção -n, que permite criar aliases de uma variável para outra.

#! /usr/bin/env bash

source exibe.sh
source preenche.sh

l0=('0' ' ' ' ' '|' '1' ' ' ' ' '|' '2' ' ' ' ')
l1=('-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-')
l2=('3' ' ' ' ' '|' '4' ' ' ' ' '|' '5' ' ' ' ')
l3=('-' '-' '-' '+' '-' '-' '-' '+' '-' '-' '-')
l4=('6' ' ' ' ' '|' '7' ' ' ' ' '|' '8' ' ' ' ')

tab='l0 1
l0 5
l0 9
l2 1
l2 5
l2 9
l4 1
l4 5
l4 9'

function verificaGanhador(){
for selected_line in l0 l2 l4; do
typeset -n ln="$selected_line"
for cl in 0 4 8; do # Troquei os índices aqui porque 1, 5 e 9 faziam referências a elementos contendo espaços (lembrando que o primeiro índice de um array é 0, não 1).
echo ${ln[$cl]}
done
done
}



... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts