pulando uma variável usando enquanto lida no bash

3

estou lendo algumas variáveis de um arquivo usando

while read a b c; do
  (something)
done < filename

existe uma maneira elegante de pular uma variável (lida em um valor vazio), ou seja, se eu quiser a = 1 b = c = 3, o que devo escrever no arquivo?

Agora eu estou colocando

1 "" 3

e, em seguida, use

b = $ (echo $ b | tr -d \ ")

mas isso é bastante complicado, IMHO

alguma ideia?

    
por Aleksandar Ivanisevic 25.03.2010 / 22:16

2 respostas

2

Com um campo em branco:

1 3

Você pode fazer:

if [[ -z c ]]
then
    c=b
    b=
fi

Se seus dados forem delimitados por vírgula, você também poderá fazer:

while IFS=, read a b c

(mas você terá problemas se os campos contiverem vírgulas, como na sua versão atual, se contiverem aspas):

1,,3

Além disso, na sua versão, em vez de usar tr , você pode fazer:

b=${b//\"\"}

mas você pode eliminar essa etapa usando o seguinte com seu formato de dados atual:

while IFS='"' read a b c

no entanto, os campos delimitados por vírgulas são um formato mais comum.

    
por 25.03.2010 / 22:46
0

Não tenho certeza se entendi o que você quer, mas você pode pular certos valores da iteração (seja enquanto, para ou qualquer outra coisa) com continuar e até parar a iteração com break

while read a b c ;do 
   if [[ $b == 0 || $c == 0 || $a == 0 ]];then
      continue
   fi      
   (makelovenotwar)
done < /foo/bar
    
por 25.03.2010 / 23:13