$ 0 변수에는 스크립트의 경로 정보가 들어 있습니다.
나는 이것을 위해 python/perl을 사용할 수 있지만 가능한 경우 bash를 사용하고 싶습니다.
~
와 같은 일을 처리 할 필요가 없습니다. 쉘은 당신을 위해 그것을합니다. 그래서 어떤 스크립트 또는 프로그램에 ~/filename
를 전달하고 작동합니다. 이러한 모든 프로그램은 ~
스스로를 처리하지 않습니다. 쉘은 인수를 /home/username/filename
로 변환하고 패스를 통과합니다. 대신 프로그램에
$ echo ~/filename
/home/mrozekma/filename
정규 파일 이름이 필요한 경우 (..
과 같은 것들이 포함되지 않은 것), realpath
(감사 Neil ) :
$ realpath ~/../filename
/home/filename
경로를 디렉토리 이름과 파일 이름으로 분리하기 위해 dirname
및 basename
:
$ dirname /foo/bar/baz
/foo/bar
$ basename /foo/bar/baz
baz
Michael에서 언급 한 것처럼 Dirname과 Basename을 사용하면 원하는 것을 얻는 가장 안전한 방법이어야합니다.
어쨌든 "Bash only Tools"로 정말로이 작업을 수행하려는 경우 매개 변수 대체를 사용할 수 있습니다.
echo `basename $PWD` # Basename of current working directory.
echo "${PWD##*/}" # Basename of current working directory.
echo
echo `basename $0` # Name of script.
echo $0 # Name of script.
echo "${0##*/}" # Name of script.
echo
filename=test.data
echo "${filename##*.}" # data
# Extension of filename.
이 예제는 직접적으로 고급 Bash 스크립팅 가이드 의 가치가있는 것입니다.
설명은 꽤 간단합니다.
$ {var # Pattern} $ VAR에서 $ VAR의 프런트 엔드와 일치하는 $ VAR의 가장 짧은 부분에서 제거하십시오. $ {var ## Pattern} $ VAR의 프런트 엔드와 일치하는 $ VAR에서 $ VAR에서 제거하십시오.
욕심 많은/비 탐욕스러운 수정 자의 어떤 종류의 regex와 #
또는 ##
와 같은 패턴을보십시오.
경로 부품의 더 복잡한 추출을 해야하는 경우 유용 할 수 있습니다.
realpath
은 실제 경로를 알려주는 명령입니다 (제거하고 기호 링크 등을 제거하십시오).
FreeBSD가있는 표준입니다. 이 토론에 따르면 Linux에서도 사용할 수 있습니다.
http://www.unix.com/shell-programming-scripting/89294-geting-real-path.html .
그 토론은 또한 bash 솔루션을 제공합니다 :
$ bash -c "cd /foo/../bar/ ; pwd"