#!/bin/bash

function opt.read {
    ((opt_comment=0))
    ((opt_line=0))
    while IFS=':' read opt_name opt_val opt_end
    do ((opt_line++))
        case $opt_name in
            ''    ) :  ;;
            *"!"   ) : ;;
            *"!{"* ) ((opt_comment++));;
            *"!}"* ) ((opt_comment--));;
            *     )
                    if [[ $opt_comment -le 0 ]]
                    then eval "$opt_name='$opt_val'" || echo "error on line $opt_line!"
                    fi
        esac
    done < "$1"
}