โฮมเพจ » ทำอย่างไร » ความแตกต่างระหว่างคำพูดเดี่ยวและคู่ใน Bash Shell คืออะไร?

    ความแตกต่างระหว่างคำพูดเดี่ยวและคู่ใน Bash Shell คืออะไร?

    การใส่ข้อความในเครื่องหมายอัญประกาศเป็นการปฏิบัติที่ค่อนข้างเป็นมาตรฐานบนบรรทัดคำสั่งโดยเฉพาะเมื่อจัดการกับไฟล์ที่มีช่องว่างในชื่อ แต่คุณจะทราบได้อย่างไรว่าจะใช้เครื่องหมายคำพูดเดี่ยวหรือคู่ ลองดูที่ความแตกต่างและเมื่อคุณควรใช้อันหนึ่งเทียบกับอีกอัน.

    กฎทั่วไปคือเครื่องหมายคำพูดคู่ยังคงอนุญาตให้ขยายตัวแปรภายในเครื่องหมายคำพูดและเครื่องหมายคำพูดเดี่ยวไม่ได้ อ่านต่อไป.

    คำพูดด้วยข้อความที่เรียบง่าย

    หากคุณเพียงแค่ใส่คำสองสามคำไว้มันไม่สำคัญว่าคุณจะใช้คำใดเพราะทั้งคู่จะทำงานเหมือนกันทุกประการ ตัวอย่างเช่นคำสั่งทั้งสองนี้จะสร้างไดเรกทอรีชื่อ Test Directory:

    mkdir "ไดเรกทอรีทดสอบ"
    mkdir 'ไดเรกทอรีทดสอบ'

    ประเภทที่มีประสบการณ์มากกว่าอาจจะทราบว่าคุณสามารถใช้ mkdir Test \ Directory ได้ถ้าต้องการ.

    การขยายตัวของตัวแปรเชลล์

    ความแตกต่างระหว่างเครื่องหมายคำพูดเดี่ยวและคู่จะมีความสำคัญมากขึ้นเมื่อคุณจัดการกับตัวแปรในบรรทัดคำสั่งโดยค่าเริ่มต้น bash จะขยายตัวแปรเช่น $ test ไปยังสตริงแบบเต็ม ก่อนอื่นเราจะกำหนดตัวแปร:

    ทดสอบ = "นี่คือการทดสอบ"

    ตอนนี้คุณสามารถใช้ตัวแปรนี้ในบรรทัดคำสั่งเช่นนี้ซึ่งควรส่งออก นี่คือการทดสอบ ไปที่คอนโซล:

    echo $ test

    นี่คือจุดที่ความแตกต่างระหว่างเครื่องหมายคำพูดคู่และคำเดี่ยวจะชัดเจนยิ่งขึ้นเมื่อคุณใช้เครื่องหมายคำพูดเดี่ยวตัวแปรจะไม่ถูกขยาย ตัวอย่างเช่นหากคุณใช้คำสั่งนี้:

    echo '$ test'

    คุณจะไม่เห็นอะไรนอกจาก '$ test' บนบรรทัดคำสั่งเมื่อคุณใช้เครื่องหมายคำพูดเดี่ยว แต่จะแสดงผลลัพธ์อย่างถูกต้องเมื่อคุณใช้เครื่องหมายคำพูดคู่:

    สิ่งเดียวกันทำงานเมื่อคุณใช้อักขระ 'เพื่อขยายคำสั่งบนบรรทัดคำสั่ง ตัวอย่างเช่นสมมติว่าคุณต้องการใช้ รหัสผ่าน คำสั่งจากภายในคำสั่งอื่น - คุณจะต้องใช้ backticks เพื่อบอกเชลล์เพื่อขยาย:

    echo 'pwd' / ทดสอบ

    หากคุณอยู่ในโฟลเดอร์บ้านของคุณคุณจะเห็นผลลัพธ์ที่มีลักษณะดังนี้:

    / home / geek / ทดสอบ

    ตัวอย่างเช่นคุณอยู่ในโฟลเดอร์ที่มีช่องว่างในพา ธ และคุณต้องการใช้คำสั่ง ln เพื่อสร้างลิงก์สัญลักษณ์ไปยังไฟล์ในไดเรกทอรีปัจจุบัน โดยปกติคุณจะต้องระบุเส้นทางแบบเต็มเมื่อใช้คำสั่ง ln ดังนั้นจึงง่ายต่อการใช้ 'pwd' เพื่อบันทึกการพิมพ์.

    ดูว่าเกิดอะไรขึ้นเมื่อคุณลองและใช้คำสั่งโดยไม่ต้องใส่เครื่องหมายคำพูด:

    ln -s 'pwd' / test / home / geek / linkedname

    คุณจะต้องล้อมรอบด้วยเครื่องหมายคำพูดแทน:

    ln -s "'pwd' / filename" / some / other / path

    สำหรับตัวอย่างที่เป็นรูปธรรมมากขึ้นสมมติว่าเรามีโครงสร้างโฟลเดอร์เช่นนี้โดยที่ชื่อไฟล์ทั้งหมดมีช่องว่างอยู่:

    เนื่องจากคำสั่ง unzip ไม่สนับสนุนการใช้ * เพื่อเรียกใช้กับไฟล์ทั้งหมดคุณจะต้องใช้คำสั่ง for แทน นี่คือสิ่งที่น่าสนใจ:

    สำหรับ f ใน * .zip ทำ unzip $ f เสร็จแล้ว

    อ๊ะ! ดูเหมือนว่ามันจะไม่ทำงาน.

    สิ่งที่เราต้องทำคือใช้เครื่องหมายคำพูดคู่รอบ ๆ ตัวแปร $ f เช่นนี้

    สำหรับ f ใน * .zip; ทำ unzip "$ f";

    ตอนนี้ทุกครั้งที่คำสั่ง for ผ่านลูปก็จะต้องรันคำสั่งแบบนี้:

    เปิดเครื่องรูด "ทดสอบ 1.zip"

    แน่นอนว่ามันจะวนซ้ำและเรียกใช้คำสั่งที่คล้ายกันสำหรับทุกไฟล์ในไดเรกทอรี.

    มารีวิวกัน

    ตอนนี้เราได้ผ่านตัวอย่างเราจะตรวจสอบอย่างรวดเร็วในกรณีที่คุณพลาด:

    คำคมคู่

    • ใช้เมื่อคุณต้องการใส่ตัวแปรหรือใช้การขยายเชลล์ภายในสตริง.
    • อักขระทั้งหมดภายในถูกตีความว่าเป็นอักขระปกติยกเว้นสำหรับ $ หรือ 'ซึ่งจะถูกขยายบนเชลล์.

    คำคมเดียว

    • อักขระทั้งหมดภายในเครื่องหมายคำพูดเดียวถูกตีความว่าเป็นอักขระสตริง.

    และจบบทเรียนของคำพูด ใช้พวกเขาอย่างชาญฉลาด.