คำตอบ StackOverflow ด้วย> 3.5K โหวตให้คุณสมบัติหนึ่งซับสำหรับการกำหนดไปDIRยังไดเรกทอรีของสคริปต์ทุบตีปัจจุบัน:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ฉันงงกับคำพูดซ้อนคู่ เท่าที่ฉันสามารถบอกได้ชิ้นส่วนต่อไปนี้เป็นเครื่องหมายคำพูดคู่:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... และทุกอย่างอื่นทางด้านขวาของ=(เช่น$( dirnameและ)) ไม่มีการอ้างอิง ในคำอื่น ๆ ฉันคิดว่าตัวละครที่ 2, 4 และ 6 ""ปิด" ตัวที่ 1, 3 และ 5 "ตามลำดับ
ฉันเข้าใจว่าการเสนอราคาสองเท่าในการ"${BASH_SOURCE[0]}"บรรลุผลสำเร็จ แต่อะไรคือจุดประสงค์ของการเสนอราคาสองคู่อื่น ๆ
หากในอีกทางหนึ่ง (และคะแนนโหวตสูงถึงแม้จะมี) ตัวอย่างข้างต้นไม่ถูกต้องสิ่งที่เป็นวิธีที่เหมาะสมเพื่อให้บรรลุเจตนาที่ระบุ?
(โดยเจตนาที่ระบุฉันหมายถึง: รวบรวมค่าที่ส่งคืนโดยpwdหลังจากการcdเข้าสู่ไดเรกทอรีที่ส่งคืนโดยครั้งแรกdirname "${BASH_SOURCE[0]}"และทำการcd-ing ใน sub-shell เพื่อให้$PWDเชลล์ parent ยังคงไม่เปลี่ยนแปลง)
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"งานได้เช่นกัน

$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )ที่อยู่: