Previously it would leave an empty path component, which programs tend
to interpret (unhelpfully) as the current directory.
case "$new:" in *:$i:*) continue;; esac
if ! [ -d $i ]; then continue; fi
case "$val" in
- "") val=$i change=t; continue ;;
$i) continue ;;
*:$i:*) val=${val%%:$i:*}:${val#*:$i:} ;;
$i:*) val=${val#$i:} ;;
new=$new:$i change=t
done
case $dir in
- l) val=${new#:}:$val ;;
- r) val=$val$new ;;
+ l) val=${new#:}${val:+:$val} ;;
+ r) val=${val:+$val:}${new#:} ;;
esac
case $change in t) eval $var=\$val ;; esac
}