|
From: | Robson Alexandre |
Subject: | Re: [shell-script] Alternativa ao comando set usando read |
Date: | Fri, 16 Nov 2018 09:34:32 -0200 |
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 $1a$ echo $2b c$ echo $3dVou 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álidaUso: 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:> -sdemaisrm -sdemaisZEBRA!!!! Só funcionará se vc fizer:rm -- -sdemaisourm ./-sdemaisEsses 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:http://www.dicas-l.com.br/educacaoTambém damos treinamento em sua empresaem qualquer cidade, com 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]} fiNã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[@]}") fiAtenciosamenteRobson AlexandreEm 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:http://www.dicas-l.com.br/educacaoTambém damos treinamento em sua empresaem qualquer cidade, com 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--
AtenciosamenteRobson Alexandre--AtenciosamenteRobson Alexandre
[Prev in Thread] Current Thread [Next in Thread]
- Alternativa ao comando set usando read, Robson Alexandre, 2018/11/09
- Re: Alternativa ao comando set usando read, itamarnet, 2018/11/09
- Re: [shell-script] Alternativa ao comando set usando read, Julio C. Neves, 2018/11/09
- Alternativa ao comando set usando read, Robson Alexandre, 2018/11/12
- Re: [shell-script] Alternativa ao comando set usando read, Julio C. Neves, 2018/11/13
- Re: [shell-script] Alternativa ao comando set usando read, Robson Alexandre <=
- Re: [shell-script] Alternativa ao comando set usando read, Julio C. Neves, 2018/11/16
Message not available
- Re: [shell-script] Re: Alternativa ao comando set usando read, Robson Alexandre, 2018/11/09
- Re: [shell-script] Re: Alternativa ao comando set usando read, itamarnet, 2018/11/12
- Re: [shell-script] Re: Alternativa ao comando set usando read, Julio C. Neves, 2018/11/12
Re: [shell-script] Alternativa ao comando set usando read, phfbettetga, 2018/11/20
- Prev by Date: Re: [shell-script] Alternativa ao comando set usando read
- Next by Date: Re: [shell-script] Alternativa ao comando set usando read
- Previous by thread: Re: [shell-script] Alternativa ao comando set usando read
- Next by thread: Re: [shell-script] Alternativa ao comando set usando read
- Index(es):