2009-07-05 3 views

답변

3

시스템은 당신이 할 수있는 '이 dirname'명령을 제공하는 경우 :

set i = `dirname ~/foo/bar.c` 
echo $i 

참고 변수 이름 앞에 누락 $입니다. 이 해결책은 셸 불가 지론입니다. 예를 들어

0

사용 dirname 명령 : 경로 주변

set i = `dirname "~/foo/bar.c"` 

주의 따옴표. 그것들을 포함하는 것이 중요합니다. 따옴표를 건너 뛰면 공백이 포함 된 경로의 경우 dirname이 실패합니다. 이전에 ~/ 표현식이 실행된다는 사실을 염두에두면 따옴표를 사용하지 않고 홈 경로에 공백이 포함되어 있으면 간단한 예조차도 실패 할 수 있습니다. 같은 문제가 다른 모든 명령에도 적용 물론

, 그것은 인용 부호와 명령에 항상 서라운드 인수에 좋은 방법입니다.

0
echo $i | awk -F"/" '{$NF="";print}' OFS="/" 
1

여기에 대한 답변을 기다리는 동안 나는 그것을 발견하는 방법 :

set i = ~/foo/bar.c 
echo $i:h 

결과 : 완전히 들어

~/foo 
1

, 기본 이름 명령으로 수행되는 파일 이름을 받고 :

set j = `basename ~/foo/bar.c` 
echo $j 
1

여기 있습니다. tcsh가
사용할 수 있지만, 몇 가지 다른 쉘 AFAIK

> set i = ~/foo/bar.c 
> echo ${i:t} 
bar.c 
> echo ${i:h} 
/home/erflungued/foo 
0

실제로 사용 dirname "$i", 그리고 ${i:h} : 위에서 다른 mething.

$i에 파일 이름 (경로 없음) 만 포함 된 경우에는 dirname이 현재 디렉토리 .을 올바르게 반환하지만 후자는 의도 한 결과를 생성하지 않습니다.

> set i = bar.c 
> echo ${i:h} 
bar.c 
> dirname "$i" 
. 
관련 문제