은 tcsh가이 변수를 감안할 때 :tcsh의 경로에서 파일 이름을 제거하는 방법은 무엇입니까?
set i = ~/foo/bar.c
어떻게 $i
단지 디렉토리 부분은받을 수 있나요?
~/foo
은 tcsh가이 변수를 감안할 때 :tcsh의 경로에서 파일 이름을 제거하는 방법은 무엇입니까?
set i = ~/foo/bar.c
어떻게 $i
단지 디렉토리 부분은받을 수 있나요?
~/foo
시스템은 당신이 할 수있는 '이 dirname'명령을 제공하는 경우 :
set i = `dirname ~/foo/bar.c`
echo $i
참고 변수 이름 앞에 누락 $입니다. 이 해결책은 셸 불가 지론입니다. 예를 들어
사용 dirname
명령 : 경로 주변
set i = `dirname "~/foo/bar.c"`
주의 따옴표. 그것들을 포함하는 것이 중요합니다. 따옴표를 건너 뛰면 공백이 포함 된 경로의 경우 dirname
이 실패합니다. 이전에 ~/
표현식이 실행된다는 사실을 염두에두면 따옴표를 사용하지 않고 홈 경로에 공백이 포함되어 있으면 간단한 예조차도 실패 할 수 있습니다. 같은 문제가 다른 모든 명령에도 적용 물론
, 그것은 인용 부호와 명령에 항상 서라운드 인수에 좋은 방법입니다.
echo $i | awk -F"/" '{$NF="";print}' OFS="/"
여기에 대한 답변을 기다리는 동안 나는 그것을 발견하는 방법 :
set i = ~/foo/bar.c
echo $i:h
결과 : 완전히 들어
~/foo
, 기본 이름 명령으로 수행되는 파일 이름을 받고 :
set j = `basename ~/foo/bar.c`
echo $j
여기 있습니다. tcsh가
사용할 수 있지만, 몇 가지 다른 쉘 AFAIK
> set i = ~/foo/bar.c
> echo ${i:t}
bar.c
> echo ${i:h}
/home/erflungued/foo
실제로 사용 dirname "$i"
, 그리고 ${i:h}
: 위에서 다른 mething.
$i
에 파일 이름 (경로 없음) 만 포함 된 경우에는 dirname
이 현재 디렉토리 .
을 올바르게 반환하지만 후자는 의도 한 결과를 생성하지 않습니다.
> set i = bar.c
> echo ${i:h}
bar.c
> dirname "$i"
.