แก้ไข: นี่คือซ้ำ/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
การเป็นชื่อผู้ใช้
~foo
foo
เป็นไดเรกทอรีบ้านของผู้ใช้ หากไม่ได้ระบุผู้ใช้ผู้ใช้ปัจจุบันจะเป็นค่าเริ่มต้น