สิ่งเล็กน้อยไก่เขี่ย ~ ทำใน Linux?


25

ฉันมีสองกรณีที่มีการใช้งานและฉันสงสัยว่าแต่ละคนทำอะไร:

  1. service=~

  2. mv ~/Desktop/Service$version.tgz $service

เจ้าหนูตัวน้อย~ทำอะไร?

จากนั้นหลังจากนั้นจะcd $serviceทำอย่างไร?


3
สิ่งนี้สมควรได้รับแท็ก[ไก่เขี่ย]
cregox

3
Tilde เป็นเชลล์เฉพาะและไม่เจาะจงสำหรับ linux
David Allan Finch

@Cawas: ถามแล้วคุณจะได้รับ
Dave Sherohman

@ ขอขอบคุณ! แต่ดูเหมือนว่าคริสจะเกลียดมัน โอ้ดีชีวิตดำเนินต่อไป ...
cregox

นี่เป็นครั้งแรกที่มีการถามหรือไม่ ฉันคาดว่าสิ่งนี้จะถูกปิดเป็นซ้ำ
Erik B

คำตอบ:


45

สิ่งที่ไก่เขี่ยเรียกว่า "ตัวหนอน"

มันขยายไปยังไดเรกทอรีบ้านของคุณ

ลอง

echo ~
echo $HOME

คำสั่งทั้งสองใส่ไดเรกทอรีบ้านของคุณเองลงบนบรรทัด

ดูbash Tilde Expansionสำหรับรายละเอียด


8
การเปรียบเทียบข้างต้นในขณะที่ถูกต้องอาจทำให้เข้าใจผิด: ตัวหนอนทำงานเฉพาะในระหว่างการตีความเชลล์ในสคริปต์และที่บรรทัดคำสั่ง อย่างไรก็ตามตัวแปรสภาพแวดล้อม $ HOME สามารถทำงานได้ทุกที่ที่ตัวแปรสภาพแวดล้อมทำงาน - ซึ่งเป็นที่ ๆ มากกว่า
เหม่ย

36

"ไก่เขี่ย" เรียกว่าตัวหนอน มันถูกใช้เพื่ออ้างถึงไดเรกทอรีบ้านของคุณซึ่งบน Linux เป็นปกติ /home/usernameมันยังถูกเก็บไว้ใน$HOMEตัวแปรสภาพแวดล้อม การขยาย~ไปยังตำแหน่งของโฮมไดเร็กตอรี่คืองานของเชลล์ (เช่น zsh หรือ bash) หรือตัวจัดการไฟล์ (เช่น Nautilus) และไม่ใช่ระบบไฟล์หรือระบบปฏิบัติการของมันเอง

คุณสามารถใช้สิ่งนี้เพื่ออ้างถึงโฮมไดเร็กตอรี่ของผู้ใช้คนอื่น ตัวอย่างเช่นถ้าชื่อผู้ใช้ของผู้อื่นเป็นbobคุณอาจจะหมายถึงไดเรกทอรีบ้านของพวกเขาด้วยซึ่งจะมีการขยายไปยัง~bob/home/bob/

ตัวอย่างแรกที่คุณกำหนดให้ตัวแปรserviceเป็น~ดังนั้นมันจึงสอดคล้องกับโฮมไดเร็กตอรี่ของคุณ นี้จะเทียบเท่ากับหรือservice=/home/usernameservice=$HOME

ที่สองเช่นสำเนาไฟล์~/Desktop/Service$version.tgz(หรือ/home/username/Desktop/Service$version.tgz) /home/usernameเพื่อ คำสั่งนี้เทียบเท่ากับ:

mv ~/Desktop/Service$version.tgz ~

หรือ

mv ~/Desktop/Service$version.tgz $HOME

หรือ

mv ~/Desktop/Service$version.tgz /home/username/

ที่สามจะเปลี่ยนไดเรกทอรีการทำงานปัจจุบัน ( $PWD) /home/username/เพื่อ นี่เทียบเท่ากับ:

cd /home/username/

หรือ

cd $HOME

3
สิ่งหนึ่งที่ควรทราบเพิ่มเติม: การขยายตัวของ Tilde เป็นงานของเชลล์หรือตัวจัดการไฟล์มันไม่ใช่ฟังก์ชั่นของระบบไฟล์ Linux เอง ดังนั้นมันมักจะไม่ทำงานในไฟล์การกำหนดค่าและการเพิ่มเครื่องหมายคำพูดรอบ ๆ "~" มันจะหยุดการขยายตัวในเชลล์
Grumbel

3
ควรสังเกตว่าโฮมไดเรกทอรีไม่จำเป็นต้องอยู่ใน / home ดังนั้นจึงไม่ควรสันนิษฐานว่า ~ ขยายเป็น / home / [ชื่อผู้ใช้ของฉัน] หรือ ~ bob ขยายเป็น / home / bob
darkliquid

ขอบคุณสำหรับคำแนะนำ @Grumbel และขอขอบคุณ @PriceChild สำหรับการเพิ่มคำแนะนำของ @ darkliquid!
Wuffers

10

ใน # 1 & # 2: ~ เป็นไดเรกทอรีหลักของคุณดังนั้นหากคุณเป็น qwerty มันอาจจะเป็นไดเรกทอรี / home / qwerty ดังนั้นลองls ~มาดูกันว่า

สำหรับ # 1: ดูเหมือนว่าฉันจะกำหนดบริการตัวแปรเป็นไดเรกทอรีบ้านของคุณ

ซึ่งหมายความว่าหลังจาก # 2 ได้ย้ายไฟล์ tgz จากไดเรกทอรีย่อย Desktop ไปยังไดเรกทอรีบ้านของคุณ # 3 จากนั้นเปลี่ยนเป็นไดเรกทอรีบ้าน


5

ดูเหมือนว่าคำสั่งจะทำดังต่อไปนี้

  1. กำหนดตัวแปรที่เรียกว่าบริการไปยังตำแหน่งโฟลเดอร์บ้านของคุณตัวอย่างเช่น

    /home/user
    
  2. มันย้ายไฟล์จากเดสก์ท็อปของคุณไปที่ระดับบนสุดของโฮมไดเร็กตอรี่ของคุณ, ตัวอย่างเช่น:

    /home/user/Desktop/Service$version.tgz $service
    
  3. สคริปต์จะเปลี่ยนไดเรกทอรีเป็นระดับบนสุดของโฮมไดเรกทอรี

ดังนั้นสคริปต์ทั้งหมดที่ทำคือเพียงแค่ล้างเดสก์ทอปของคุณโดยการย้ายไฟล์ไปยัง/home/userโฟลเดอร์ของคุณแทน


1

ฉันจะเพิ่มที่นี่ที่ ~ ผู้ใช้ขยายไปยังโฮมไดเร็กตอรี่ของ [user] ด้วยดังนั้นมันไม่ใช่แค่ทางลัดสำหรับโฮมไดเร็กตอรี่ของคุณเอง

เช่น:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.