dirname
명령 인쇄를 제외한 모든 인수로 주어진 경로 이름의 마지막 수준과 일치하지 않도록
편집 그것을 변경되었습니다.
$ NDS=/opt/novell/opt/eDirectory/opt/abc
$ NDSHOME=`dirname $NDS`
$ echo $NDSHOME
/opt/novell/opt/eDirectory/opt
(필요에 따라 export
를 추가합니다.)
편집 :
는 위의이 경우에는 작동하지 않습니다. 운영자는 마지막 구성 요소가 아닌 opt
다음에 오는 경로의 모든 구성 요소를 제거하려고합니다. 다른 사람들에게 유용 할 수 있도록 여기에 남겨 두겠습니다.
당신 루프에서 수 사용 dirname
(basename
에 의해 결정) 마지막 구성 요소는`선택 하 '인 경우 중지 :
NDSHOME="$NDS"
while [ "`basename $NDSHOME`" != opt ] ; do
NDSHOME="`dirname $NDSHOME`"
done
하지만 그것을 할 필요가보다 더 복잡하다; sed가 더 나은 솔루션입니다.
SiegeX의 대답은 좋지만 경로 구성 요소가 아닌 opt
을 문자열로 처리합니다.예를 들어,
/opt/novell/opt/eDirectory/opt/helicopter
/opt/novell/opt/eDirectory/opt/helic
으로하는이 시도집니다 :
NDSHOME=`echo "$NDS" | sed 's,\(.*\)/opt/.*$,\1,'`
이 (구분자로 ,
의 사용보다는 /
을 참고, 그래서에서 /
문자 패턴을 이스케이프 할 필요는 없습니다.)
Solaris의'/ bin/sh' 명령은 실제 (System V) Bourne 쉘입니다. 대신 Korn 쉘 (또는 Bash)을 사용하는 것을 고려해야합니다. –