Câu trả lời của StackOverflow với> 3,5K phiếu có tính năng một lớp này để gán cho DIR
thư mục của tập lệnh bash hiện tại:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Tôi bối rối bởi các trích dẫn kép lồng nhau. Theo như tôi có thể nói, các đoạn sau đây được trích dẫn hai lần:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... và mọi thứ khác ở bên phải của =
(tức là $( dirname
và )
) không được trích dẫn. Nói cách khác, tôi giả sử rằng các ký tự thứ 2, 4 và 6 lần lượt "
"đóng" các ký tự thứ 1, 3 và 5 "
.
Tôi hiểu những gì trích dẫn kép "${BASH_SOURCE[0]}"
đạt được, nhưng mục đích của hai cặp trích dẫn kia là gì?
Mặt khác, nếu (và điểm số phiếu cao mặc dù), đoạn trích trên là không chính xác, cách nào đúng để đạt được ý định danh nghĩa của nó?
(Theo ý nghĩa danh nghĩa, ý tôi là: thu thập giá trị được trả về pwd
sau lần đầu tiên cd
vào thư mục được trả về bởi dirname "${BASH_SOURCE[0]}"
và thực hiện cd
-ing trong một vỏ con, sao cho $PWD
vỏ cha mẹ không thay đổi).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
hoạt động.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.