셸에서 다음 코드 줄을 이해하고 싶습니다. 현재 작업 디렉토리를 가져 오는 데 사용됩니다. $(variable)
이름이 변수 이름 내부의 값을 반환 한다는 것을 알고 있지만 무엇 $(command)
을 반환해야합니까? 명령을 실행 한 후 값을 반환합니까? 이 경우 `
명령을 실행하는 데 사용할 수 있습니다 .
CWD="$(cd "$(dirname $0)"; pwd)"
다른 버전의 셸에서도 다음 코드 줄에서 동일한 출력을 가져올 수 있습니다.
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$(cd..
및 의 의미를 이해할 수 없습니다 $(dirname
.
아무도이 명령이 어떻게 실행되는지 알아낼 수 있습니까?
답변
의 사용 $
등 ${HOME}
가정의 가치를 제공합니다. $
like의 사용법은 $(echo foo)
서브 쉘의 괄호 안에있는 모든 것을 실행하고 값으로 반환하는 것을 의미합니다. 내 예에서는 표준 출력에 쓸 foo
것이므로echo
foo
답변
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
아무도이 명령이 어떻게 실행되는지 알아낼 수 있습니까?
명령의 다른 부분을 살펴 보겠습니다. BASH_SOURCE
소스 파일 이름을 포함하는 bash 배열 변수입니다. 따라서 "${BASH_SOURCE[0]}"
스크립트 파일의 이름을 반환합니다.
dirname
파일 이름에서 마지막 구성 요소 를 제거하는 GNU coreutils에서 제공하는 유틸리티 입니다. 따라서 말하여 스크립트를 실행하면 bash foo
, "$( dirname "${BASH_SOURCE[0]}" )"
반환 .
됩니다. 당신이 말하면 bash ../foo
, 그것은 돌아올 것입니다 ..
; 위해 bash /some/path/foo
그것을 반환 것입니다 /some/path
.
마지막으로 전체 명령 "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
은 호출되는 스크립트가 포함 된 절대 디렉토리를 가져옵니다.
$(...)
명령 대체를 허용합니다. 즉, 명령의 출력이 명령 자체를 대체하고 중첩 될 수 있습니다.