izabera 1418427220 learn # abspath()(p=$1/; [[ ${p::1} = / ]] || p=$PWD/$p; while [[ $p = *@(/../|/./|//)* ]]; do p=${p//\/.\//\/} p=${p//\/\//\/} p=${p/#\/..\//\/} p=${p/\/+([!\/])\/..\//\/}; done; [[ $p = / ]] || p=${p%/}; printf %s\\n "$p"); abspath a/b//c/./d/../e izabera 1418429454 forget izabera 1418429463 learn # abspath()(p=$1/; [[ ${p::1} = / ]] || p=$PWD/$p; while [[ $p = */@(..|.|)/* ]]; do p=${p//\/.\//\/} p=${p//\/\//\/} p=${p/#\/..\//\/} p=${p/\/+([!\/])\/..\//\/}; done; [[ $p = / ]] || p=${p%/}; printf %s\\n "$p"); abspath a/b//c/./d/../e izabera 1418429744 forget izabera 1418429757 learn # abspath()(p=$1/; [[ $p = /* ]] || p=$PWD/$p; while [[ $p = */@(..|.|)/* ]]; do p=${p//\/.\//\/} p=${p//\/\//\/} p=${p/#\/..\//\/} p=${p/\/+([!\/])\/..\//\/}; done; [[ $p = / ]] || p=${p%/}; printf %s\\n "$p"); abspath a/b//c/./d/../e