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

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

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


From: Julio C. Neves
Subject: Re: [shell-script] Re: Alternativa ao comando set usando read
Date: Mon, 12 Nov 2018 12:10:04 -0200

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: 



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



Em seg, 12 de nov de 2018 às 11:45, address@hidden [shell-script] <address@hidden> escreveu:
 

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


reply via email to

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