> 3.5K oy içeren bir StackOverflow yanıtıDIR , geçerli bash betiğinin dizinine atamak için bu tek astarı içerir:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Yuvalanmış çift tırnak işaretinden şaşkınım. Anlayabildiğim kadarıyla, aşağıdaki parçalar çift tırnaklı:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... ve =(yani $( dirnameve )) 'nin sağındaki diğer her şey alıntılanmamıştır. Başka bir deyişle, 2., 4. ve 6. "karakterlerin "sırasıyla 1., 3. ve 5. karakterleri "kapattığını" varsayıyorum .
Çift tırnakların ne elde ettiğini anlıyorum "${BASH_SOURCE[0]}", ancak diğer iki çift tırnak arasındaki amaç nedir?
Öte yandan, (ve yüksek oy puanı buna rağmen), yukarıdaki pasaj yanlışsa, nominal amacına ulaşmanın doğru yolu nedir?
( Nominal niyetle demek istediğim: tarafından döndürülen dizine pwdilk cd-ing'ten sonra döndürülen değeri toplayın ve üst kabuğu değiştirmeden kalacak dirname "${BASH_SOURCE[0]}"şekilde cd-ing'i bir alt kabukta yapın $PWD).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"çalışır.

$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... ).