История изменений
Исправление vodz, (текущая версия) :
Но IFS лучше сохранять и восстанавливать. А уж первый символ сравнивать вызовом внешней программы (grep) при наличии bash совсем тяп-ляпно. Вот даже без bash-измов, работает для конфига в том числе с комментариями по '#' после строки с адресом и флагом (оно само так получилось) :) :
#!/bin/ash
# cat cfg.txt
10.10.10.1=of
10.20.20.1=sh #special
#10.10.30.1=of
10.30.50.2=sh
#cat parser.sh
parser_ip_str() {
local l ip flg
while read l; do
l=${l%#*}
[ -z "$l" ] && continue
ip=${l%=*}
flg=${l#*=}
if [ of = "$flg" ]; then
ip_ip="$ip_ip${ip_ip:+ }$ip"
elif [ sh = "$flg" ]; then
ip_sh="$ip_sh${ip_sh:+ }$ip"
fi
done < "$1"
}
parser_ip_str cfg.txt
echo "ip_ip=$ip_ip ip_sh=$ip_sh"
Исходная версия vodz, :
Но IFS лучше сохранять и восстанавливать. А уж первый символ сравнивать вызовом внешней программы (grep) при наличии bash совсем тяп-ляпно. Вот даже без bash-измов, работает для конфига в том числе с комментариями по '#' после строки с адресом и флагом (оно само так получилось) :) :
#!/bin/ash
parser_ip_str() {
local l ip flg
while read l; do
l=${l%#*}
[ -z "$l" ] && continue
ip=${l%=*}
flg=${l#*=}
if [ of = "$flg" ]; then
ip_ip="$ip_ip${ip_ip:+ }$ip"
elif [ sh = "$flg" ]; then
ip_sh="$ip_sh${ip_sh:+ }$ip"
fi
done < "$1"
}
parser_ip_str cfg.txt
echo "ip_ip=$ip_ip ip_sh=$ip_sh"