[bash] 달러 기호와 괄호 안에 명령을 넣는 것은 쉘에서 무엇을 의미합니까 : $ (command)

셸에서 다음 코드 줄을 이해하고 싶습니다. 현재 작업 디렉토리를 가져 오는 데 사용됩니다. $(variable)이름이 변수 이름 내부의 값을 반환 한다는 것을 알고 있지만 무엇 $(command)을 반환해야합니까? 명령을 실행 한 후 값을 반환합니까? 이 경우 `명령을 실행하는 데 사용할 수 있습니다 .

CWD="$(cd "$(dirname $0)"; pwd)"

다른 버전의 셸에서도 다음 코드 줄에서 동일한 출력을 가져올 수 있습니다.

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

$(cd..및 의 의미를 이해할 수 없습니다 $(dirname.

아무도이 명령이 어떻게 실행되는지 알아낼 수 있습니까?



답변

의 사용 $${HOME}가정의 가치를 제공합니다. $like의 사용법은 $(echo foo)서브 쉘의 괄호 안에있는 모든 것을 실행하고 값으로 반환하는 것을 의미합니다. 내 예에서는 표준 출력에 쓸 foo것이므로echofoo


답변

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 )"은 호출되는 스크립트가 포함 된 절대 디렉토리를 가져옵니다.

$(...) 명령 대체를 허용합니다. 즉, 명령의 출력이 명령 자체를 대체하고 중첩 될 수 있습니다.


답변