สวัสดี เราชื่อ tilde หรือที่ เรียกเราว่า ตัวหนอน EP 2

เครื่องหมาย ~ - tilde ใน BASH มีความหมายพิเศษบางอย่าง ที่มากกว่า Home Directory

author image
drs

Technology evangelistic advocacy

Posted on 2024-09-27 00:51:47 +0700

การเอ่ยถึง Shell ในหัวข้อนี้ จะหมายถึง BASH - Bourne Again SHell

tilde-prefix แบบที่ 1

tilde-prefix ที่เป็นตัวอักษร ที่ไม่ใช่เครื่องหมายบวก (+) , เครื่องหมายลย (-) หรือ ตัวเลข

  • tilde-prefix จะถูกตีความเป็น login name จากนั้น ~tilde-prefix จะถูกแทนที่ด้วยตัวแปร HOME ของ login name นั้น
  • ถ้า tilde-prefix ไม่มีอักขระอะไรเลย ก็คือ เป็น ~ ตัวเดียว หรือ ~/ แบบนี้ login name จะมีค่าเป็น login name ที่กำลังใช้งานอยู่ จากนั้น ~tilde-prefix จะถูกแทนที่ด้วยตัวแปร HOME ของ login name ที่กำลังใช้งานอยู่
ตัวอย่าง tilde-prefix ที่มีค่าเป็น student
echo ~student
/home/student
❯ echo ~student/data
/home/student/data
❯ cat  /etc/passwd | grep student
student:x:1000:1001:student:/home/student:/bin/zsh

❯ id
uid=1001(drs) gid=1003(drs) groups=1003(drs),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),118(admin),119(netdev),120(lxd),1000(docker),1002(wheel)
❯ echo ~/data
/home/drs/data

tilde-prefix แบบที่ 2

ในกรณี tilde-prefix เป็น เครื่องหมายบวก (+) เท่านั้น หรือ เครื่องลบ (-) เท่านั้น

  • ~+ จะถูกแทนที่ด้วยตัวแปร PWD
  • ~- จะถูกแทนที่ด้วยตัวแปร OLDPWD
echo $PWD
/tmp
❯ echo $OLDPWD
/var/log

❯ echo ~+
/tmp
❯ echo ~-
/var/log

tilde-prefix แบบที่ 3

ในกรณี tilde-prefix เป็น ตัวเลข หรือ เครื่องหมายบวก (+) แล้วตามด้วยตัวเลข หรือ เครื่องลบ (-) แล้วตามด้วยตัวเลข

  • ~​​​N และ ~​+​​​N จะถูกแทนที่ด้วยค่าในตำแหน่งที่ N นับจากค่าล่าสุดใน Directory Stack
  • ~-N จะถูกแทนที่ด้วยค่าในตำแหน่งที่ N นับจากค่าแรกใน Directory Stack

​​Directory Stack คืออะไร Directory Stack ใน BASH เป็นชุดของไดเรกทอรีที่ BASH เก็บไว้เป็น stack ซึ่งช่วยให้ผู้ใช้สามารถสลับไปมาระหว่าง directory ที่ใช้งานล่าสุดได้สะดวก การบริหารจัดการ Directory Stack ทำได้โดยคำสั่ง pushd เป็นคำสั่งที่ใช้ในการเพิ่ม directory เข้าไปใน Directory Stack และ ย้าย working directory ไปยัง directory ที่ระบุด้วย (การทำงานใส่วนนี้ เหมือนคำสั่ง cd) และ ขั้นตอนในการลบ directory ออกจาก Directory Stack ทำได้ด้วยคำสั่ popd ซึ่งก็จะย้าย working directory ด้วยเช่นกัน

นอกจากคำสั่ง pushd และ popd แล้วยังมีคำสั่ง dirs ที่ใช้ในการแสดงค่าใน Directory Stack ได้อีกด้วย

ตัวอย่างการ Directory Stack เพื่อเตรียมไปเป็นตัวอย่างในการใช้ Tilde Expansion

#-- ตัวอย่างการเพิ่ม directory ใน Directory Stack
❯ pushd /var/log
/var/log ~
❯ pushd /tmp
/tmp /var/log ~
❯ pushd /etc
/etc /tmp /var/log ~
❯ pushd /bin
/bin /etc /tmp /var/log ~
#-- แสดงค่าใน Directory Stack  เรียงตามลำดับล่าสุด ไปลำดับแรก
❯ dirs -v
 0  /bin
 1  /etc
 2  /tmp
 3  /var/log
 4  ~
#-- ตัวอย่างการลบ directory ออกจาก Directory Stack
❯ popd
/etc /tmp /var/log ~
❯ pwd
/etc 
#-- แสดงค่าใน Directory Stack  เรียงตามลำดับล่าสุด ไปลำดับแรก จะเห็นได้ว่า /bin ถูกลบออกไป
❯ dirs -v
 0  /etc
 1  /tmp
 2  /var/log
 3  ~

ใช้ Tilde Expansion แสดงค่า directory ในตำแหน่งต่าง ๆ ใน Directory Stack ซึ่งในขณะนี้ Directory Stack ของเรา จะมีค่า ดังนี้ เรียกจากลำดับล่าสุดไปลำดับแรกใน Directory Stack โดยเริ่มนับลำดับแรกจาก 0

/etc | /tmp | /var/log | ~

dirs -v
 0  /etc
 1  /tmp
 2  /var/log
 3  ~
❯ echo ~2 
/var/log
❯ echo ~+3
/home/drs
❯ echo ~-2
/tmp

end of document

Share on

Tags

Human knowledge belongs to the world

a line from the movie "Antitrust"