คำตอบ 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 .... )
ที่อยู่: