#! /bin/sh ### ### Expand a list of symbolic references to other lists. expand () { slaves="" for i in "$@"; do case "$i" in :*) name=${i#:} eval found=\${set_$name+t}\${set_$name-nil} set=\${set_$name} case "$found" in nil) echo >&2 "$0: no such set \`$name'"; exit 1 ;; esac slaves="$slaves $set" ;; *) slaves="$slaves $i" ;; esac done echo $slaves } defset () { setname=$1; shift eval set_$setname='$(expand "$@")' } case $# in 0 | 1) echo >&2 "Usage: $0 FILE ITEM|:LIST ..." exit 1 ;; esac . "$1"; shift expand "$@"