variável + array

1. variável + array

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 24/06/2024 - 18:59h

pessoas ... tenho uma pancada de variável ... todas tem como conteúdo string ... preciso criar arquivos com o nome das variáveis e contendo seus respectivos textos ... pensei em fazer array com as variáveis, mas não estou conseguindo aplicar os nomes aos arquivos.
vou dar como exemplo somente uma variável ... mas são dezenas
um="texto1"
...
...
...

preciso criar arquivo de nome "um" tendo como conteúdo "texto1"

qual a melhor abordagem ???




  


2. Re: variável + array

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/06/2024 - 21:51h

Pela pergunta, entendo que você não sabe a priori os nomes das variáveis. É isso?

Se for, você pode experimentar algo parecido com o seguinte (supondo bash, não testei com outros shells).
exec 3< <(set)	# Usa o comando set para imprimir a lista de variáveis e valores (formato “var=valor”).
while read -u 3 var; do
var="${var%%=*}"
declare -n value=$var
echo "$value" > /tmp/$var
done
exec 3<&-


Contudo, eu não espero que esse código seja muito robusto. Provavelmente não vai saber lidar com variáveis que sejam arrays, e tampouco com variáveis cujo valor contenha linhas vazias e quebras de linha.

Trocar a invocação do comando set por declare pode ajudar a contornar algumas das limitações com a abordagem acima, mas possivelmente não contorna todas, além de aumentar a complexidade.

Você quer isso para todas as variáveis, ou apenas para variáveis de ambiente? Se for só para as de ambiente, facilita.


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


3. Re: variável + array

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/06/2024 - 00:05h

paulo1205 escreveu:

Pela pergunta, entendo que você não sabe a priori os nomes das variáveis. É isso?

Se for, você pode experimentar algo parecido com o seguinte (supondo bash, não testei com outros shells).
exec 3< <(set)	# Usa o comando set para imprimir a lista de variáveis e valores (formato “var=valor”).
while read -u 3 var; do
var="${var%%=*}"
declare -n value=$var
echo "$value" > /tmp/$var
done
exec e<&-


...


depois vou implementar seu código pra ver se atende ... por enquanto tenho isso
a única forma que consegui foi tendo que criar 2 array

		
um="texto1"
dois="texto2"
tres="texto3"

arq=("um" "dois" "tres")
conteudo=("$um" "$dois" "$tres")

for i in "${!arq[@]}"; do echo "${arq[i]} ... ${conteudo[i]}";done


nesse meu exemplo testei só a saída ( sem criar arquivo ) pra ver se atendia !!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




4. Re: variável + array

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/06/2024 - 01:22h


Mauriciodez escreveu:

pessoas ... tenho uma pancada de variável ... todas tem como conteúdo string ... preciso criar arquivos com o nome das variáveis e contendo seus respectivos textos ... pensei em fazer array com as variáveis, mas não estou conseguindo aplicar os nomes aos arquivos.
vou dar como exemplo somente uma variável ... mas são dezenas
um="texto1"
...
...
...

preciso criar arquivo de nome "um" tendo como conteúdo "texto1"

qual a melhor abordagem ???


Boa noite Maurício
Segue:
awk '{for(n=1;n<=(NF/2);n++) printf $(n+3) > $n }' <<< "um dois tres texto01 texto02 texto03"
Testei aqui (Termux), funcionou...

Att.: Marcelo Oliver



5. Re: variável + array

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/06/2024 - 13:57h

paulo1205 escreveu:
Pela pergunta, entendo que você não sabe a priori os nomes das variáveis. É isso?
Se for, você pode experimentar algo parecido com o seguinte (supondo bash, não testei com outros shells).
...


Campeão ... testei o código aqui e tive o mesmo problema que tive antes quando tentei listar as variáveis ... listou ( ou tentou listar ) tudo, o que preciso é que liste somente as variáveis declaradas dentro do script ( para ser mais exato, dentro da função já que esse código será uma função dentro de um script "geral")

mauricio@phantom ~/Temp/11 $ cat cod.sh
#!/bin/bash

um="texto1"
dois="texto2"
tres="texto3"

exec 3< <(set) # Usa o comando set para imprimir a lista de variáveis e valores (formato “var=valor”).
while read -u 3 var; do
var="${var%%=*}"
declare -n value=$var
echo "$value" > ~/temp/11/$var
done
exec e<&-


mauricio@phantom ~/Temp/11 $ ./cod.sh 
./cod.sh: linha 11: /home/mauricio/temp/11/BASH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASHOPTS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_ALIASES: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_ARGC: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_ARGV: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_CMDS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_LINENO: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_LOADABLES_PATH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_SOURCE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_VERSINFO: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASH_VERSION: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/COLORTERM: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/DBUS_SESSION_BUS_ADDRESS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/DESKTOP_SESSION: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/DIRSTACK: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/DISPLAY: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/EUID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GDMSESSION: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GNOME_DESKTOP_SESSION_ID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GNOME_TERMINAL_SCREEN: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GNOME_TERMINAL_SERVICE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GPG_AGENT_INFO: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GROUPS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GTK3_MODULES: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/GTK_OVERLAY_SCROLLING: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/HOME: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/HOSTNAME: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/HOSTTYPE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/IFS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/LANG: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/LANGUAGE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/LOGNAME: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/LS_COLORS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/MACHTYPE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/OPTERR: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/OPTIND: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/OSTYPE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/PATH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/PIPESTATUS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/PPID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/PS4: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/PWD: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/QT_ACCESSIBILITY: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SESSION_MANAGER: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SHELL: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SHELLOPTS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SHLVL: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SSH_AGENT_PID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/SSH_AUTH_SOCK: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/TERM: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/UID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/USER: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/VTE_VERSION: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XAUTHORITY: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_CURRENT_DESKTOP: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_DATA_DIRS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_GREETER_DATA_DIR: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_RUNTIME_DIR: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SEAT: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SEAT_PATH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SESSION_CLASS: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SESSION_DESKTOP: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SESSION_ID: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SESSION_PATH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_SESSION_TYPE: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/XDG_VTNR: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/_: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/dois: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/tres: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/um: Arquivo ou diretório inexistente
./cod.sh: linha 13: exec: e: não encontrado



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: variável + array

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/06/2024 - 14:07h


msoliver escreveu:
...
awk '{for(n=1;n<=(NF/2);n++) printf $(n+3) > $n }' <<< "um dois tres texto01 texto02 texto03"
...


Seu código funciona, mas não vai ficar funcional para colocar dezenas de "títulos" depois dezenas de "conteúdos" ( 50 caracteres +ou- cada ) ... para atualizar os conteúdos depois vai ser uma pajelança !!!

abçs

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




7. Re: variável + array

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/06/2024 - 20:13h

Mauriciodez escreveu:

paulo1205 escreveu:
Pela pergunta, entendo que você não sabe a priori os nomes das variáveis. É isso?
Se for, você pode experimentar algo parecido com o seguinte (supondo bash, não testei com outros shells).
...


Campeão ... testei o código aqui e tive o mesmo problema que tive antes quando tentei listar as variáveis ... listou ( ou tentou listar ) tudo, o que preciso é que liste somente as variáveis declaradas dentro do script ( para ser mais exato, dentro da função já que esse código será uma função dentro de um script "geral")

mauricio@phantom ~/Temp/11 $ cat cod.sh
#!/bin/bash

um="texto1"
dois="texto2"
tres="texto3"

exec 3< <(set) # Usa o comando set para imprimir a lista de variáveis e valores (formato “var=valor”).
while read -u 3 var; do
var="${var%%=*}"
declare -n value=$var
echo "$value" > ~/temp/11/$var
done
exec e<&-


mauricio@phantom ~/Temp/11 $ ./cod.sh 
./cod.sh: linha 11: /home/mauricio/temp/11/BASH: Arquivo ou diretório inexistente
./cod.sh: linha 11: /home/mauricio/temp/11/BASHOPTS: Arquivo ou diretório inexistente


Pelas mensagens de erro, /home/mauricio/temp/11 não existe. Você teria de criar o diretório primeiro.

./cod.sh: linha 13: exec: e: não encontrado 


e>&-” foi um erro de digitação meu. O certo, no caso, é “3>&-”, para fechar o descritor de arquivos nº 3, que foi aberto mais acima para interceptar a saída do comando set.

Desculpe pelo erro que passou despercebido.


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