Jawaban StackOverflow dengan> 3.5K memilih fitur one-liner ini untuk ditugaskan ke DIRdirektori skrip bash saat ini:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Saya bingung dengan tanda kutip ganda yang bersarang. Sejauh yang saya tahu, fragmen berikut dikutip ganda:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... dan segala sesuatu lainnya di sebelah kanan =(yaitu $( dirnamedan )) tidak dikutip. Dengan kata lain, saya berasumsi bahwa karakter ke-2, ke-4, dan ke-6 ""menutup" karakter ke-1, ke-3, dan ke-5 ".
Saya mengerti apa yang "${BASH_SOURCE[0]}"dicapai tanda kutip ganda , tetapi apa tujuan dari dua pasang tanda kutip lainnya?
Sebaliknya, jika (dan skor suara tinggi), cuplikan di atas tidak benar, apa cara yang tepat untuk mencapai maksud nominalnya?
( Maksud saya maksud: mengumpulkan nilai yang dikembalikan oleh pwdsetelah pertama- cdke direktori dikembalikan oleh dirname "${BASH_SOURCE[0]}", dan melakukan cd-ing dalam sub-shell, sehingga $PWDshell induk tetap tidak berubah).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"berfungsi juga.

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