Bash Shell - 자신의 스크립트 파일 이름 가져오기

Bash 쉘 스크립트 안에서 자신의 스크립트 파일 이름을 가져오는 방법을 소개합니다.

스크립트에서 $0는 스크립트가 실행될 때 사용된 상대 경로를 갖고 있습니다.

예를 들어, 아래와 같이 스크립트를 실행하면 $0./bash-script/abc/example.sh를 값으로 갖고 있습니다.

$ bash ./bash-script/abc/example.sh
$ ./bash-script/abc/example.sh

아래 명령어에서는 $0abc/example.sh가 됩니다.

$ bash abc/example.sh

1. basename으로 파일 이름 추출

$(basename "$0")는 파일 경로에서 파일 이름을 추출합니다.

#!/bin/bash

echo "Script path = $0"
echo "Script name =" $(basename "$0")

Output:

$ bash ./bash-script/abc/example.sh
Script path = ./bash-script/abc/example.sh
Script name = example.sh

2. ${0##*/}으로 파일 이름 추출

${0##*/}는 파일 경로에서 파일 이름을 추출합니다.

#!/bin/bash

echo "Script path = $0"
echo "Script name = ${0##*/}"

Output:

$ bash ./bash-script/abc/example.sh
Script path = ./bash-script/abc/example.sh
Script name = example.sh

3. BASH_SOURCE으로 파일 이름 추출 (source로 스크립트 실행 시)

source ./bash-script/abc/example.sh처럼 source로 스크립트를 실행할 때는 $0에 파일 경로가 할당되지 않습니다.

이런 경우에는 $0 대신에 ${BASH_SOURCE}를 사용하셔야 합니다.

#!/bin/bash

echo "Script path = $0"
echo "Script path(bash source) =" $(basename "${BASH_SOURCE}")

echo "Script name =" $(basename "$0")
echo "Script name(bash source) =" $(basename "${BASH_SOURCE}")

bash와 source로 실행할 때, 다음과 같이 차이점을 확인할 수 있습니다.

$ bash ./bash-script/abc/example.sh
Script path = bash-script/abc/example.sh
Script path(bash source) = example.sh
Script name = example.sh
Script name(bash source) = example.sh

$ source ./bash-script/abc/example.sh
Script path = bash
Script path(bash source) = example.sh
Script name = bash
Script name(bash source) = example.sh
Loading script...
codechachaCopyright ©2019 codechacha