Jawaban StackOverflow dengan> 3.5K memilih fitur one-liner ini untuk ditugaskan ke DIR
direktori 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 $( dirname
dan )
) 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 pwd
setelah pertama- cd
ke direktori dikembalikan oleh dirname "${BASH_SOURCE[0]}"
, dan melakukan cd
-ing dalam sub-shell, sehingga $PWD
shell 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 .... )
.