Назад | Перейти на главную страницу

пропуск переменной при чтении в bash

я читаю несколько переменных из файла, используя

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

есть ли элегантный способ пропустить переменную (прочитать пустое значение), т.е. если я хочу a = 1 b = c = 3, что я должен написать в файле?

Прямо сейчас я кладу

1 "" 3

а затем используйте

b = $ (эхо $ b | tr -d \ ")

но это довольно громоздко, ИМХО

Любые идеи?

С пустым полем:

1 3

Ты можешь сделать:

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

Если ваши данные разделены запятыми, вы также можете:

while IFS=, read a b c

(но у вас возникнут проблемы, если ваши поля содержат запятые, как в вашей текущей версии, если они содержат кавычки):

1`` 3

Кроме того, в вашей версии вместо использования tr, ты можешь сделать:

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

но вы можете полностью исключить этот шаг, используя следующее с вашим текущим форматом данных:

while IFS='"' read a b c

однако поля с разделителями-запятыми являются более распространенным форматом.

Я не уверен, понял ли я, что вы хотите, но вы можете пропустить определенные значения итерации (будь то while, for или что-то еще) с помощью Продолжать и даже остановить итерацию с помощью перерыв

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