แก้ไข: นี่คือซ้ำ/programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ ฉันไม่มีชื่อเสียงที่จะปิดคำถามนี้ซ้ำ
ฉันไม่ได้อ้างถึง~ในไดเรกทอรีบ้าน แต่สิ่งนี้:
$ ls ~foo/bar
/some/mount/point/foo/bar
อย่างไรก็ตามหากฉันลองด้วยจุดเมานต์ที่แตกต่างกันเช่น:
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
สิ่งที่~เรียกว่าในบริบทนี้? มันทำงานยังไง?
แก้ไข: ข้อมูลเพิ่มเติมจากความคิดเห็นบางส่วนด้านล่าง:
- ฉันสามารถยืนยันได้ว่า
fooไม่ใช่ชื่อผู้ใช้ในระบบของฉัน - เมื่อพยายามเติมข้อความอัตโนมัติระบบจะ
ls -lah ~ไม่แสดงตัวเลือกทั้งหมด เช่นฉันสามารถcd ~quxเมื่อquxไม่แสดงในการเติมข้อความอัตโนมัติ อีกครั้งquxไม่ใช่ผู้ใช้ในระบบของฉัน - หากเป็นเรื่อง
/some/mount/pointเครือข่ายร่วมกัน - รายละเอียดทั้งหมดแนะนำให้พา ธ ที่สร้างชื่อไว้ซึ่งเป็นคุณลักษณะของเชลล์ Z ของการขยายชื่อพา ธ แต่วิธีนี้จะทำงานได้ดีเช่นกันซึ่งดูเหมือนจะไม่สนับสนุนสิ่งต่าง ๆ เช่นพา ธ ที่มีชื่อของเชลล์ Z
/some/mount/pointแน่นอนไม่ใช่ไดเรกทอรีบ้านของฉัน cd ~พาฉันไปที่/Users/$username/$HOME
zshดูเหมือนว่าจะใช้เครื่องหมายตัวหนอนเพื่อระบุไดเรกทอรีที่มีชื่อ
bash -c "ls ~foo/bar") - ซึ่งไม่ได้มีชื่อไดเรกทอรี ยิ่งไปกว่านั้นภายใน zsh หากฉันตรวจสอบenvฉันไม่เห็นไดเรกทอรีที่ตั้งชื่อใด ๆ ฉันใช้ Mac OS และฉันรู้สึกว่านี่เป็นคุณสมบัติเฉพาะของ OS X
~fooคุณกล่าวว่า ใช้สตริงจริง (ไม่ได้ตัวอย่างfoo) grep "actual username" /etc/passwdและทำ ~textควรทำงานกับชื่อผู้ใช้ที่เป็นไปได้เท่านั้นตามคู่มือ bash (ไม่ได้แปลว่ามันสามารถเข้าสู่ระบบได้จริงในกรณีของผู้ใช้ระบบเช่น~lpเช่น) ในการทดสอบทั้งหมดของฉันนั้น~stringสอดคล้องกับstringการเป็นชื่อผู้ใช้
~foofooเป็นไดเรกทอรีบ้านของผู้ใช้ หากไม่ได้ระบุผู้ใช้ผู้ใช้ปัจจุบันจะเป็นค่าเริ่มต้น