모든 수준의 깊이에 중첩된 cwd를 따라 경로를 참조하는 일반적인 방법이 있습니까? 이것은거의역방향 상대 경로 조회와 같습니다.
예를 들어:
$ pwd
/Users/somebody/foo/bar/baz
$ echo /[3] <-- 3rd directory from / in current path
/Users/somebody/foo
$ echo ~/[1] <-- 1 directory from ~ in current path
~/foo
답변1
다음 기능을 다음 항목에 추가하세요 .bashrc
.
parent() {
local count
local arg
count=$(($1+1))
if [ "$2" = "" ]
then
arg="$PWD"
else
arg="$2"
if [[ $arg != /* ]]
then
printf 'Warning: "%s" does not begin with "/".\n' "$arg"
fi
fi
cut -d/ -f1-"$count" <<< "$arg"
}
tparent() { # The ‘t’ stands for “tilde”.
local count
local arg
local home
count=$(($1+1))
if [ "$2" = "" ]
then
arg="$PWD"
else
arg="$2"
fi
if [ "$3" = "" ]
then
home="$HOME"
else
home="$3"
fi
if [[ $home != /* ]]
then
printf 'Warning: "%s" does not begin with "/".\n' "$home"
fi
if [[ $arg/ != $home/* ]]
then
printf 'Error: "%s" does not begin with "%s".\n' "$arg" "$home"
return 1
fi
printf '%s' "~${arg/$home}" | cut -d/ -f1-"$count"
}
첫 번째 추출에 사용됩니다.cut -d/ -f1-number
N
경로명의 구성 요소입니다.
number
~ 해야 하다N
첫 번째 필드 앞의 빈 문자열이 /
첫 번째 필드로 간주되기 때문에 +1입니다.
용법:
$ pwd
/home/gman/stack/JW
$ parent 3
/home/gman/stack
$ tparent 1
~/stack
이는 공백과 탭이 있는 경로를 처리할 수 있지만 개행 문자는 처리할 수 없습니다.