쉘 스크립트에서 $ {0 % / *}의 기능은 무엇입니까? 정확히 무엇을합니까? :

이것이 멍청한 질문이라면 죄송하지만 성공하지 않고 검색했습니다.

두 번째 줄은 정확히 무엇을합니까? :

#!/bin/sh
cd ${0%/*} || exit 1

첫 번째는 shebang이고 두 번째는 디렉토리를 변경하려고 시도하지만 혼란스러운 부분은 ${0%/*}입니다.

그 두 번째 줄을 설명해 주시겠습니까?



답변

${0}스크립트의 첫 번째 인수입니다 (예 : 스크립트 이름 또는 경로). 로 스크립트를 시작하면 정확히 path/to/script.sh다음 과 같은 ${0}문자열이 path/to/script.sh됩니다.

%/*부분은의 값을 수정합니다 ${0}. /파일 이름 이 올 때까지 모든 문자를 가져 옵니다. 위의 예에서는 ${0%/*}입니다 path/to.

쉘에서 작동하는 것을 볼 수 있습니다.

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh는 다른 많은 종류의 “매개 변수 대체”를 지원합니다. 예를 들어 경로 대신 파일 이름을 사용하는 방법은 다음과 같습니다.

$ echo "${x##*/}"
script.sh

일반적으로 %%%스트립 접미사 동안 ###스트립 프리픽스. 매개 변수 대체 에 대해 자세히 읽을 수 있습니다 .