Дарю кусок кода, использующй конструкцию "eval eval" (которая выполняется аж за три прохода интерпретатора). Если кто догадается, зачем этот код мне может быть нужен, пишите :)
set_aliases () {
local base _base fld varsq
base="$1"; shift
_base="${base:0:2}"
if [ "${_base}" = 'f%' ]; then
varsq='${base}_${fld}'
else
varsq='${fld}_${base}'
fi
if echo "${_base}" | grep -q '^[frb]%'; then
base="${base:2}"
[ -n "$base" ] || return 1
fi
{
for fld in $@; do
eval eval "$fld='\$'{$varsq}"
done
}
return $?
}