> 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 $( dirname
ve )
) '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 pwd
ilk 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 .... )
.