3.5K 이상의 투표가 포함 된 StackOverflow 답변DIR
에는 현재 bash 스크립트의 디렉토리에 할당 할 수 있는 이 한 줄짜리 기능이 있습니다.
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
중첩 된 큰 따옴표에 의아해합니다. 내가 알 수있는 한 다음 조각은 큰 따옴표로 묶습니다.
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... 그리고 오른쪽에있는 다른 모든 =
(즉, $( dirname
와 )
) 인용 부호로 둘러싸입니다. 즉, 두 번째, 네 번째 및 여섯 "
번째 "
문자는 각각 첫 번째, 세 번째 및 다섯 번째 문자를 "닫습니다" 라고 가정합니다 .
큰 따옴표가 "${BASH_SOURCE[0]}"
무엇 을 달성 하는지 이해 하지만 다른 두 따옴표의 목적은 무엇입니까?
반면에 (그리고 높은 투표 점수에도 불구하고) 위의 스 니펫이 잘못된 경우 명목상의 의도를 달성하는 올바른 방법은 무엇입니까?
( 공칭 의도로 나는 의미합니다 :을 반환 한 디렉토리에 pwd
처음 cd
-ing 한 후 반환 된 값을 수집하고 하위 셸에서 -ing을 dirname "${BASH_SOURCE[0]}"
수행 하여 상위 셸의 값을 변경 하지 마십시오 ).cd
$PWD
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
작동합니다.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.