echo $ -1 แสดงอะไร


14

อะไรการส่งออกของecho $-1, echo $-2, echo $-3.. หมายความว่าอย่างไร

ในหนึ่งในกล่อง Linux ของฉันมันแสดงให้ฉัน:

echo $-1
imsBEl1
echo $-2
imsBEl2

และในอีกกล่อง Linux มันแสดง:

echo $-1
himBH1
echo $-2
himBH2

พวกเขากำลังทำแผนที่ไปยังตำแหน่งหน่วยความจำบางอย่างหรืออย่างอื่น?


1
ชื่อแสดงปัญหาต่อไปนี้ในแถบด้านข้าง: meta.stackexchange.com/q/229363/205964
IQAndreas

ฉันได้เพิ่มการแก้ไขที่เสนอซึ่งพยายามแก้ไข แต่ในไม่ช้าฉันก็รู้ว่ามันเป็นเพียงแถบด้านข้างที่แสดง MathJax ซึ่งหมายความว่าเมื่อชื่ออยู่ในหน้านี้มันเพิ่งได้รับแบ็กสแลชที่ไม่จำเป็น
IQAndreas

คำตอบ:


19

POSIX กำหนด$ -เป็น:

-

(เครื่องหมายขีดคั่น) ขยายเป็นแฟล็กตัวเลือกปัจจุบัน (ชื่อตัวอักษรตัวเดียวตัดแบ่งเป็นสตริง) ตามที่ระบุในการเรียกใช้โดยคำสั่งในตัวพิเศษที่กำหนดไว้หรือโดยปริยายโดยเชลล์

ดังนั้น$-อาจเป็นฐานที่แตกต่างกันในเปลือกของคุณหรือวิธีที่คุณเรียกมัน

1หรือ2แยกโทเค็นที่นี่ เมื่อเชลล์เห็นการไม่ออกเสียง$มันจะระบุจุดเริ่มต้นของผู้สมัครใด ๆ สำหรับการขยายพารามิเตอร์การทดแทนคำสั่งหรือการขยายเลขคณิต มันเห็น$-และขยายมันทิ้งส่วนที่เหลือไม่เปลี่ยนแปลง

คุณสามารถดูรายละเอียดเพิ่มเติมในส่วนการรู้จำโทเค็น


18

echo $-พิมพ์ตัวเลือกของเชลล์ปัจจุบัน (ไม่มี-คำนำหน้า) 1และ2เป็นโทเค็นเพิ่มเติมที่ไม่เกี่ยวข้อง


11

การเพิ่มคำตอบของ Miroslav:

echo $-พิมพ์ตัวเลือกของเชลล์ปัจจุบัน (ไม่มี-คำนำหน้า) 1 และ 2 เป็นโทเค็นที่ไม่เกี่ยวข้องเพิ่มเติม

ซึ่งหมายความว่าสิ่งเหล่านี้เป็นตัวเลือกสำหรับแต่ละเครื่องตามลำดับ

imsBEl
himBH

ฉันค้นคว้าความหมายของแต่ละธงและรวบรวมความหมายด้านล่างด้วยการถอดความเล็กน้อย

-ผม

หากมีอ็อพชัน -i อยู่เชลล์จะเป็นแบบโต้ตอบ

-m

โหมดจอภาพ เปิดใช้งานการควบคุมงาน

-B

เชลล์ทำการค้ำยันส่วนขยาย ( ดู Brace Expansion ) นี่เป็นค่าเริ่มต้น

-s

หากอ็อพชัน -s มีอยู่หรือหากไม่มีอาร์กิวเมนต์อยู่หลังจากประมวลผลตัวเลือกคำสั่งจะถูกอ่านจากอินพุตมาตรฐาน ตัวเลือกนี้ช่วยให้สามารถตั้งค่าพารามิเตอร์ตำแหน่งเมื่อเรียกใช้เชลล์แบบโต้ตอบ

-E

errtrace

-l

ทำการทุบตีทำหน้าที่ราวกับว่ามันถูกเรียกเป็นเปลือกเข้าสู่ระบบ

-h

hashall

-H การขยายประวัติศาสตร์

คุณลักษณะนี้เปิดใช้งานโดยค่าเริ่มต้นสำหรับเชลล์แบบโต้ตอบ


3

หากต้องการขยายคำตอบที่มีอยู่ให้ลองecho "${-1}"และecho "${-2}"- คุณจะได้รับข้อผิดพลาด "การแทนที่ไม่ถูกต้อง"เพราะแทนที่จะใช้-1เป็นชื่อตัวแปรที่ใช้เครื่องหมายยัติภังค์เพื่อแทนที่ค่าหากชื่อตัวแปรก่อนที่จะไม่ได้กำหนด ตัวอย่างเช่น:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.