я читаю несколько переменных из файла, используя
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