shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Alternativa ao comando set usando read


From: Julio C. Neves
Subject: Re: [shell-script] Alternativa ao comando set usando read
Date: Fri, 16 Nov 2018 10:13:25 -0200

Realmente esta é a melhor lista da qual já participei.

Uma vez, tentei aprender perl e me inscrevi numa lista, assinando como PerlNaJaca... ;) A 1a. e única pergunta que fiz foi como poderia posicional o cursor numa determinada linha x coluna (o nosso tput cup).

Recebi uma 5 respostas e nenhuma dizia como fazer e a melhor resposta me mandava ler uns 5 livros. Desisti na hora.

Já li o man e o código do Bash diversas vezes e tudo que aprendi, tenho o maior prazer em dividir com todos. Afinal, sou professor por vocação e amante das filosofias de Sw Livre e Conhecimento Livre).
Abraços,
Julio
Logotipo Dicas-L, por Ricardo Burile

Acompanhe a Dicas-L no twitter

Promoção Especial BLACK FRIDAY

Preparamos uma oferta muito especial para a BLACK FRIDAY, todos os cursos de nosso portal educacional por apenas R$ 497,00:


CursoValor de Tabela
Programação Shell LinuxR$ 997,00
Expressões RegularesR$ 97,00
Dialog --por-exemplosR$ 297,00
Linux: Dicas e TruquesR$ 497,00
TOTALR$ 1.888,00
PROMOÇÃO BLACK FRIDAYR$ 497,00

O curso Linux: Dicas e Truques está em fase final de preparação e será lançado em dezembro. Pela promoção BLACK FRIDAY os quatro cursos sairão por R$ 497,00, que podem ser parcelados em até 10 vezes sem juros. O acesso ao material é vitalício bem como o nosso suporte de dúvidas, por email ou através de nossa plataforma EAD.

IMPORTANTE: Ao se inscrever no curso Programação Shell Linuxvocê terá acesso gratuito aos demais cursos.

O seu investimento é totalmente garantido. Você tem até quinze dias para solicitar um reembolso caso o material não lhe agrade.

Para saber mais, veja também as nossas Perguntas mais Frequentes ou escreva para nós.

Para obter o desconto, digite o cupom

BLACKFRIDAY

no formulário de inscriçao do portal Hotmart.

Quero me inscrever!



Dicas-L: Uma dica por dia desde 3 de março de 1997 
As mensagens da lista Dicas-L são veiculadas diariamente 
para 19760 assinantes. 
Newsfeed RSS: http://www.dicas-l.com.br/index.xml 
Caso não queira mais receber estas mensagens clique aqui.



Em sex, 16 de nov de 2018 às 09:35, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:
 

Mestres Júlio e Itamar,

    Sempre aprendo novas coisas aqui nesta lista. Já tomei nota aqui desta dica também.

    Agradeço por compartilhar os conhecimentos.

Atenciosamente
Robson Alexandre

Em ter, 13 de nov de 2018 às 10:55, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:
 

Olá Robson,
o ksh é o Shell default do UNIX, mas seu desenvolvimento é muito lento e por isso acho que o bash está bem à sua frente em qualidade e segurança.

Mas veja: vc pode usar o cmd set para passar os dados do BASH_REMATCH para variáveis posicionais. É bem simples:
$ a=(a 'b c' d)
$ set "${a[@]}"
$ echo $1
a
$ echo $2
b c
$ echo $3
d

Vou aproveitar para passar para a lista uma curiosidade sobre a solução que vc apresentou qdo postou a sua dúvida. Nela vc fez:

set -- "${BASH_REMATCH[@]}"

Esse -- que vc usou não está errado mas tb não tem finalidade. Isso é usado para dizer ao Shell que a partir desse ponto não tem mais opção, só tem parâmetro.

Para vc entender, primeiro vou te explicar o seguinte: o cmd find tem uma opção pouco conhecida que é muito semelhante ao -exec, só que antes dele executar o cmd associado, ele pergunta se vc quer mesmo executar aquele cmd.

Então, se eu quiser saber quais arquivos do meu diretório usam a opção -ok eu faço:
$ grep -F '-ok' *
grep: opção -- 'k' inválida
Uso: grep [OPÇÃO]... PADRÃO [ARQUIVO]...
Experimente "grep --help" para mais informações.

Mas se eu fizer:

$ grep -F -- '-ok' *

Ele entenderá o -F como uma opção e o -- encerrará as opções.

Um teste fácil de fazer. Execute:

> -sdemais
rm -sdemais

ZEBRA!!!! Só funcionará se vc fizer:

rm -- -sdemais
ou
rm ./-sdemais

Esses são os tipos de pulos do gato que vc não encontra em nenhum curso ou publicação.


Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.


Em ter, 13 de nov de 2018 às 01:52, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:

Mestre Júlio,

        tô fazendo isso tudo no bash. Eu ainda vou aprender esse ksh pois já vi várias pessoas falando muito bem deste shell.
        Realmente, eu acabei fazendo uma salada usando o set desnecessariamente, pois buscava uma maneira do read ler as posições do array. Como bem disseram, só manipulando o IFS.
if [[ "$texto" =~ ^(/[^@ ]+)(@[^ ]+)?\ ?(.*)? ]]; then
  primeiro=${BASH_REMATCH[1]}
  segundo=${BASH_REMATCH[2]}
  terceiro=${BASH_REMATCH[3]}
fi
        Não havia pensado nestas possibilidade que vc e o Itamar passaram. Um outro colega sugeriu a seguinte "gambiarra":
if [[ "$texto" =~ ^(/[^@ ]+)(@[^ ]+)?\ ?(.*)? ]]; then
  IFS='|' read match primeiro segundo terceiro < <(printf "%s|" "${BASH_REMATCH[@]}")
fi


Atenciosamente
Robson Alexandre



Em sex, 9 de nov de 2018 21:37, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:
 

Fala Robson,
se o seu Shell for bash e vc usar Here Strings (<<<) teu problema está resolvido, tipo read a b c <<< "1 2 3".
Se for ksh ou sh vc erá de fazer echo 1 2 3 | read a b c.

Mas no seu caso específico, para que isso? BASH_REMATCH já é uma variável do tipo vetor (array) cujo elemento índice 0 (zero) contem todo o casamento da ER e nos elementos seguintes, o que casou com cada um dos grupos (similar aos retrovisores)..

Vou aproveitar para fazer um marketing para o pessoal do RJ: a partir do dia 17 estarei dando um treinamento presencial de shell (em 40 horas) no RJ (no Centro) em 4 sábados. Como ainda sobraram umas poucas vagas e já está quase na hora, o Paulo Henrique (da Escola Linux), que está promovendo o curso me pediu para avisá-los que fará uma redução substancial no preço. Entre em contato com ele via address@hidden.

Se vc mora em outro local, a Livra-TE (Tecnologia & Educação em Sw Livre) + Dicas-l oferecerá um belíssimo desconto (50%++) em cursos referentes a Shell em ensino à distancia. Veja os cursos em: www.dicas-l.com.br/educacao.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.



Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:
 

Boa tarde shelleiros,

    gostaria de saber se há alguma alternativa ao comando set usando o read, por exemplo, para atribuir valores a variáveis.
Meu código segue abaixo:
[[ "$texto" =~ ^(/[^@ ]+)(@[^ ]+)?\ ?(.*)? ]] && {
  set -- "${BASH_REMATCH[@]}"
  var1=$2
  var2=$3
  var3=$4
}
Minha dúvida é se há alguma alternativa para atribuição das variáveis usando read, como por exemplo:
array=('a' 'b c' 'd' 'e')
read var1 var2 var3 var4 < "${array[@]}"

Atenciosamente,

Robson Alexandre

--

Atenciosamente

Robson Alexandre

--
Atenciosamente

Robson Alexandre


reply via email to

[Prev in Thread] Current Thread [Next in Thread]