Discussion:
[shell-script] Alternativa ao comando set usando read
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-11-09 15:42:33 UTC
Permalink
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
itamarnet@yahoo.com.br [shell-script]
2018-11-09 16:57:27 UTC
Permalink
Caro Robson

Que tal:


for i in "${array[@]"; do let j++; eval var$j=\"$i\"; done


[]'s
Itamar
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-11-09 21:09:47 UTC
Permalink
Grande Itamar,

Acredito que não me fiz entender nesse ponto, veja que meu objetivo é
atribuir cada valor do array de seus índices a variáveis pré-definidas como
se passássemos as variáveis posicionais á uma função.

Então partindo do:

#!/bin/basharray=('a' 'b c' 'd' 'e')read varX varY varW varZ < "${array[@]}"

O resultado esperado é:

varX=a # $1 ou ${array[0]}varY='b c' # $2 ou ${array[1]}varW=d
# $3 ou ${array[2]}varZ=e # $4 ou ${array[3]}

Não sei se o *read* ou outra ferramenta possui algum parâmetro para pegar
os posicionais separadamente


Atenciosamente
Robson Alexandre
Post by ***@yahoo.com.br [shell-script]
Caro Robson
[]'s
Itamar
--
Atenciosamente

Robson Alexandre
itamarnet@yahoo.com.br [shell-script]
2018-11-12 13:35:42 UTC
Permalink
Grande Robson

Então realmente entendi errado mesmo.
O que vc quer é colocar os conteúdos ordenados em um array numa variável que vc escolhe o nome, para o contexto do seu script suponho. O Mestre Julio já deu uma dica valiosa, e acrescento que talvez mudar a variável de ambiente IFS pudesse ajudar.


Mas no exemplo que forneceu não vejo um forma de fazer isso diretamente com o read, exceto se trocarmos os espaços contidos que não são os separadores como é o caso da varY:


#!/bin/bash
array=('a' 'b c' 'd' 'e')
read varX varY varW varZ <<< "${array[@]// /_}"
O resultado seria:
varX=a # $1 ou ${array[0]}
varY='b_c' # $2 ou ${array[1]}
varW=d # $3 ou ${array[2]}
varZ=e # $4 ou ${array[3]}


Note que nesse caso seria necessário fazer um tratamento posterior na variável que teve o caractere trocado, onde nesse exemplo troquei o espaço por _.


Assim diretamente numa abordagem de uma única linha essa é a única forma que conheço, levando em consideração o exemplo dado.


[]'s
Itamar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-11-12 14:10:04 UTC
Permalink
Fala Itamar,
não tinha certeza de ter entendido a dúvida do colega e dei uma resposta
mais ou menos genérica. Posteriormente pensei em algo parecido com a sua
sugestão, fazendo o seguinte:

$ IFS=' ' read var{X..Z} <<< "${array[@]// /^}" # Matando os espaços
$ echo ${varY//^/ } # Repondo os espaços
b c

A vantagem é ser bash puro.

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/educacao
<http://www.dicas-l.com.br/educacao/>*



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by ***@yahoo.com.br [shell-script]
Grande Robson
Então realmente entendi errado mesmo.
O que vc quer é colocar os conteúdos ordenados em um array numa variável
que vc escolhe o nome, para o contexto do seu script suponho. O Mestre
Julio já deu uma dica valiosa, e acrescento que talvez mudar a variável de
ambiente IFS pudesse ajudar.
Mas no exemplo que forneceu não vejo um forma de fazer isso diretamente
com o read, exceto se trocarmos os espaços contidos que não são os
varX=a # $1 ou ${array[0]}varY='b_c' # $2 ou ${array[1]}varW=d # $3 ou ${array[2]}varZ=e # $4 ou ${array[3]}
Note que nesse caso seria necessário fazer um tratamento posterior na
variável que teve o caractere trocado, onde nesse exemplo troquei o espaço
por _.
Assim diretamente numa abordagem de uma única linha essa é a única forma
que conheço, levando em consideração o exemplo dado.
[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2018-11-09 16:48:45 UTC
Permalink
Caro Robson

Que tal:


for i in "${array[@]}"; do let j++; eval var$j=\"$i\"; done


[]'s
Itamar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-11-09 20:09:37 UTC
Permalink
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 ***@linuxsolutions.com.br.

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/educacao
<http://www.dicas-l.com.br/educacao/>*



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*



Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
gostaria de saber se há alguma alternativa ao comando *set* usando o
*read*, por exemplo, para atribuir valores a variáveis.
var1=$2
var2=$3
var3=$4}
Minha dúvida é se há alguma alternativa para atribuição das variáveis
------------------------------
Atenciosamente,
Robson Alexandre
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-11-13 03:51:40 UTC
Permalink
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
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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.
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
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/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
gostaria de saber se há alguma alternativa ao comando *set* usando o
*read*, por exemplo, para atribuir valores a variáveis.
var1=$2
var2=$3
var3=$4}
Minha dúvida é se há alguma alternativa para atribuição das variáveis
------------------------------
Atenciosamente,
Robson Alexandre
--
Atenciosamente

Robson Alexandre
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-11-13 12:04:13 UTC
Permalink
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.
-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: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*



Em ter, 13 de nov de 2018 às 01:52, Robson Alexandre
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.
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.
Atenciosamente
Robson Alexandre
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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.
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
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/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
gostaria de saber se há alguma alternativa ao comando *set* usando
o *read*, por exemplo, para atribuir valores a variáveis.
var1=$2
var2=$3
var3=$4}
Minha dúvida é se há alguma alternativa para atribuição das variáveis
------------------------------
Atenciosamente,
Robson Alexandre
--
Atenciosamente
Robson Alexandre
Robson Alexandre alexandrerobson@gmail.com [shell-script]
2018-11-16 11:34:32 UTC
Permalink
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
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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
$ a=(a 'b c' d)
$ echo $1
a
$ echo $2
b c
$ echo $3
d
Vou aproveitar para passar para a lista uma curiosidade sobre a solução
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
$ grep -F '-ok' *
grep: opção -- 'k' inválida
Uso: grep [OPÇÃO]... PADRÃO [ARQUIVO]...
Experimente "grep --help" para mais informações.
$ grep -F -- '-ok' *
Ele entenderá o -F como uma opção e o -- encerrará as opções.
-sdemais
rm -sdemais
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: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em ter, 13 de nov de 2018 às 01:52, Robson Alexandre
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.
primeiro=${BASH_REMATCH[1]}
segundo=${BASH_REMATCH[2]}
terceiro=${BASH_REMATCH[3]}fi
Não havia pensado nestas possibilidade que vc e o Itamar
Atenciosamente
Robson Alexandre
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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.
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
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/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
gostaria de saber se há alguma alternativa ao comando *set* usando
o *read*, por exemplo, para atribuir valores a variáveis.
var1=$2
var2=$3
var3=$4}
Minha dúvida é se há alguma alternativa para atribuição das variáveis
------------------------------
Atenciosamente,
Robson Alexandre
--
Atenciosamente
Robson Alexandre
--
Atenciosamente

Robson Alexandre
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-11-16 12:13:25 UTC
Permalink
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

Ler no site
<http://www.dicas-l.com.br/agendalivre/agendalivre_20181114-2144.php>.
[image: Logotipo Dicas-L, por Ricardo Burile]

Acompanhe a Dicas-L no twitter <http://www.twitter.com/dicasl>
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 Linux R$ 997,00
Expressões Regulares R$ 97,00
Dialog --por-exemplos R$ 297,00
Linux: Dicas e Truques R$ 497,00
*TOTAL* *R$ 1.888,00*
*PROMOÇÃO BLACK FRIDAY* *R$ 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 Linux*você 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
<http://www.dicas-l.com.br/educacao/programacao-shell-linux.html#faq>
ou escreva
para nós <***@dicas-l.com.br>.

Para obter o desconto, digite o cupom

BLACKFRIDAY

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

Quero me inscrever! <https://pay.hotmart.com/S7443366A>



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
<http://www.dicas-l.com.br/descadastramento.php>.



Em sex, 16 de nov de 2018 às 09:35, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
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
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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
$ a=(a 'b c' d)
$ echo $1
a
$ echo $2
b c
$ echo $3
d
Vou aproveitar para passar para a lista uma curiosidade sobre a solução
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
$ grep -F '-ok' *
grep: opção -- 'k' inválida
Uso: grep [OPÇÃO]... PADRÃO [ARQUIVO]...
Experimente "grep --help" para mais informações.
$ grep -F -- '-ok' *
Ele entenderá o -F como uma opção e o -- encerrará as opções.
-sdemais
rm -sdemais
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: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em ter, 13 de nov de 2018 às 01:52, Robson Alexandre
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.
primeiro=${BASH_REMATCH[1]}
segundo=${BASH_REMATCH[2]}
terceiro=${BASH_REMATCH[3]}fi
Não havia pensado nestas possibilidade que vc e o Itamar
Atenciosamente
Robson Alexandre
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
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.
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
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/educacao
<http://www.dicas-l.com.br/educacao/>*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Em sex, 9 de nov de 2018 às 13:48, Robson Alexandre
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
gostaria de saber se há alguma alternativa ao comando *set*
usando o *read*, por exemplo, para atribuir valores a variáveis.
var1=$2
var2=$3
var3=$4}
Minha dúvida é se há alguma alternativa para atribuição das variáveis
------------------------------
Atenciosamente,
Robson Alexandre
--
Atenciosamente
Robson Alexandre
--
Atenciosamente
Robson Alexandre
phfbettetga phfbettega@gmail.com [shell-script]
2018-11-09 16:40:29 UTC
Permalink
Olá Robson, com here strings funciona mas acho que dá problema com o IFS

array=('a' 'b c' 'd' 'e')
read var1 var2 var3 var4 < "${array[@]}"
bash: "${array[@]}": redirecionamento ambíguo

read var1 var2 var3 var4 <<< "${array[@]}"
echo $var1 $var2 $var3 $var4
a b c d e
echo $var1-$var2-$var3-$var4
a-b-c-d e

Nesse caso um loop resolve melhor

for i in "${array[@]}";do echo "$i";done
a
b c
d
e

for i in "${array[@]}";do read var$((++j)) <<<"$i";done
echo -$var1- -$var2- -$var3- -$var4-
-a- -b c- -d- -e-

Pode ser alterando o IFS também,
mas aí teria que ter algum separador diferente.
O livro do mestre Júlio tem um capítulo que trata
do read com todos esses assuntos :) vale a pena.
Abraços Paulo
Post by Robson Alexandre ***@gmail.com [shell-script]
Boa tarde shelleiros,
    gostaria de saber se há alguma alternativa ao comando *set* usando o *read*, por exemplo, para atribuir
valores a variáveis.
var1=$2
var2=$3
var3=$4
}
array=('a' 'b c' 'd' 'e')
--------------------------------------------------------------------------------------------------------------
Atenciosamente,
Robson Alexandre
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
Responder através da web
Loading...