diff --git a/realpath.sh b/realpath.sh index df2944b..fe018dd 100755 --- a/realpath.sh +++ b/realpath.sh @@ -1,44 +1,42 @@ #!/bin/sh -p="${1%/}" case "$1" in - /*) p="${1#/}" - r="";; - *) p="${PWD#/}/$1";; + /*) left="${1#/}";; + *) left="${PWD#/}/$1";; esac -r="" +result="" -while [ -n "$p" ]; do - case "$p" in +while [ -n "$left" ]; do + case "$left" in */*) - seg="${p%%/*}" - p="${p#*/}" + seg="${left%%/*}" + left="${left#*/}" ;; *) - seg="$p" - p="" + seg="$left" + left="" ;; esac case "$seg" in .) - r="${r%/*}" + result="${result%/*}" continue ;; ..) - r="${r%/*/*}" + result="${result%/*/*}" continue ;; esac - r="$r/$seg" - target="$(readlink "$r")" + result="$result/$seg" + target="$(readlink "$result")" case "$target" in - /*) p="${target}" - r="";; + /*) left="${target}" + result="";; '') ;; - *) p="${p%/*}/${target}";; + *) left="${left%/*}/${target}";; esac - p="${p#/}" + left="${left#/}" done -echo "$r" +echo "$result"