Discussion:
[shell-script] Manter valor de variável caso atribuição seja nula
Alfredo Casanova atcasanova@gmail.com [shell-script]
2017-09-14 22:19:12 UTC
Permalink
Fala galera.
Surgiu uma dúvida aqui e queria saber se tem alguma forma "mais esperta" de
resolver no bash.

Tenho um loop que atribui valor a uma variavel:
por exemplo,

while true; do
var=$(curl -s $url | grep algumacoisa)
done

Nos casos em que esse curl / grep retorne vazio, eu poderia manter o ultimo
valor da variavel:

last=nada
while true; do
last=$var
var=$(curl -s $url | grep algumacoisa)
var=${var:-$last}
done

Existe alguma forma de simplificar isso em apenas uma linha? Alguma
expansão de parâmetros ninja que eu esteja perdendo?
Esse caso serve para várias variáveis no meu loop, então simplificar isso
ajudaria muito!

Valeu!
itamarnet@yahoo.com.br [shell-script]
2017-09-15 13:12:02 UTC
Permalink
Alfredo

Tenta usar isso:


var=$(curl -s $url | grep algumacoisa || echo "$var")



Acredito que supra sua necessidade




[]'s
Itamar
Alfredo Casanova atcasanova@gmail.com [shell-script]
2017-09-15 13:24:15 UTC
Permalink
Boa Itamar! Fiquei tão vidrado pensando em expansão de parâmetros que fugi
do simples
Post by ***@yahoo.com.br [shell-script]
Alfredo
var=$(curl -s $url | grep algumacoisa || echo "$var")
Acredito que supra sua necessidade
[]'s
Itamar
phfbettega@yahoo.com.br [shell-script]
2017-09-15 01:59:16 UTC
Permalink
Olá Alfredo, se entendi direito, se o grep tiver sucesso, $var é a saída do grep,
senão $var é igual a $last.
Não lembrei de nenhuma expansão, mas veja se esse sed está certo.

last=nada;var=
echo -var=$var- -last=$last-
-var=- -last=nada-

# grep sucesso
var=$(sed "s/z/echo foobar|grep foo/e;s/^$/$last/" <<<z)
echo -var=$var- -last=$last-
-var=foobar- -last=nada-

# grep falha
var=$(sed "s/z/echo foobar|grep boo/e;s/^$/$last/" <<<z)
echo -var=$var- -last=$last-
-var=nada- -last=nada-

Abraços Paulo
Post by Alfredo Casanova ***@gmail.com [shell-script]
Fala galera.
Surgiu uma dúvida aqui e queria saber se tem alguma forma "mais esperta" de resolver no bash.
por exemplo,
while true; do
  var=$(curl -s $url | grep algumacoisa)
done
last=nada
while true; do
  last=$var
  var=$(curl -s $url | grep algumacoisa)
  var=${var:-$last}
done
Existe alguma forma de simplificar isso em apenas uma linha? Alguma expansão de parâmetros ninja que eu esteja
perdendo?
Esse caso serve para várias variáveis no meu loop, então simplificar isso ajudaria muito!
Valeu!
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
Responder através da web
Loading...