readonly functions. using bash's hash table rather than path