ความแตกต่างระหว่างการตั้งค่าสถานะตัวเลือกและอาร์กิวเมนต์คืออะไร [ปิด]


14
  • ls -a(ฉันพิจารณา-aตัวเลือก)

  • sudo -u username( -u= ตัวเลือกusername= arg)

  • chmod 664 my-dir( 664= ตัวเลือกmy-dir= arg)

ฉันไม่สามารถนึกถึงตัวอย่างที่อาจพูดว่า "นี่คือธง" ยกเว้นบางทีเมื่อดูรายชื่อ dir:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

สิ่งนี้มีการตั้งค่า "อ่านธง" สำหรับเจ้าของ แต่นั่นคือทั้งหมด จะหยุดฉันไม่ให้เรียกสิ่งนั้นว่า "ตัวเลือกการอ่าน"

ฉันเขียนและแก้ไขเอกสารทางเทคนิคเป็นหลักใน DocBook XML และฉันกำลังมองหาคำอธิบายของความแตกต่างซึ่งสอดคล้องและถูกต้องที่สุด อย่างไรก็ตามฉันเห็นรูปแบบการขึ้นรูปแล้ว:

  1. ธงมีแนวโน้มที่จะเป็นบูลีน เช่น,setenforce 0
  2. ตัวเลือกช่วยกำหนดวิธีการทำงานของคำสั่ง บางคนอาจจะเป็นตัวเลือก
  3. ข้อโต้แย้งบอกคำสั่งสิ่งที่วัตถุที่จะทำงานบน

ฉันเห็นตัวเองรวมธงและตัวเลือก (ตัวเลือกบางอย่างอาจมีค่าที่เป็นไปได้หลายสิบ แต่บูลีนมีเพียงสอง) อาร์กิวเมนต์มีความแตกต่างกันมากพอที่จะคงไว้เช่นนี้


2
"มีอะไรจะหยุดฉันไม่ให้โทร ... "? ไม่มีอะไรเลย อย่างที่ไม่มีอะไรหยุดฉันจากการเรียกต้นไม้โพดำ
muru

@muru - แม้ว่าพจนานุกรมภาษาอังกฤษจะไม่เห็นด้วยกับการยืนยันของคุณ
DarkHeart

3
หากต้องการทำให้สับสนมากขึ้นฉันจะเรียกตัวเลือกที่ไม่ใช้พารามิเตอร์ / โต้แย้งค่าสถานะตามls -aตัวอย่างของคุณ (สำหรับฉันแล้วธงเป็นตัวแปรแบบบูล)
Ulrich Schwarz

3
พวกเขากำลังสุนัขสุนัข ; ทั้งสามสิบคน :-) ⁠
สกอตต์

รูปแบบที่คุณเห็นมีเพียงเพราะคุณ จำกัด สิ่งที่คุณต้องการดูให้แคบลง วิธีหนึ่งในการสร้างไฟล์ TAR (นั่นฉันได้ใช้มานานกว่า 30 ปี) และไม่ได้เช่นสารสกัดจากมันคือ tar c abc.txt > x.tarในมีcเป็นฟังก์ชั่น คุณกำลังพยายามโทรหาตัวเลือกนั้นและไม่เหมาะสมอย่างสมบูรณ์
Anthon

คำตอบ:


17

ไม่มีคำจำกัดความที่สอดคล้องกันของคำว่า "ตัวเลือก", "การโต้แย้ง" และ "การตั้งค่าสถานะ" และไม่มีอำนาจกลางในโลกการพัฒนาซอฟต์แวร์ที่สามารถบังคับใช้การใช้งานได้ สิ่งนี้เกิดขึ้นกับคำศัพท์มากมาย: หลังจากใช้เวลานานกว่า 30 ปีในการใช้คำว่า "directory" ตอนนี้ฉันต้องจัดการกับคนที่ใช้คำว่า "folder" ซึ่งสับสนกับคำพูดใหม่ของ Microsoft

มีหลายวิธีที่คำจำกัดความฉันทามติสำหรับคำศัพท์สามารถเกิดขึ้นได้ในการเขียนโปรแกรม ในกรณีของ "อาร์กิวเมนต์" / "ตัวเลือก" / "การตั้งค่าสถานะ" คู่มือและแบบฝึกหัดสำหรับภาษาการเขียนโปรแกรมได้ช่วยในการบังคับใช้เช่นเดียวกับข้อกำหนดที่ใช้ในไลบรารีทั่วไป

ตัวอย่างเช่นสิ่งที่คุณใส่ในบรรทัดคำสั่งหลังจากคำสั่งมักจะเรียกว่า "การขัดแย้ง" ต่อคำสั่งโดยการเปรียบเทียบกับการขัดแย้งกับการเรียกใช้ฟังก์ชันและนี่อาจเป็นส่วนหนึ่งเพราะพวกเขาถูกเรียกว่า "การขัดแย้ง" ในคู่มือ C ด้วยเหตุนี้argcและargv) argparseห้องสมุดหลามนอกจากนี้ยังช่วยในการบังคับใช้คำว่า "ข้อโต้แย้ง" อย่างไรก็ตามฉันได้เห็นพวกเขาถูกเรียกว่า "พารามิเตอร์"

คำว่า "ตัวเลือก" ได้มาจาก "ตัวเลือก" ซึ่งหมายถึงพวกเขาสามารถถูกทิ้งไว้ getoptห้องสมุด C เป็นหนึ่งในการใช้คำนี้ แต่มีแบบอย่างสำหรับ "ตัวเลือก" ที่ไม่ใช่ตัวเลือกจริง: ตัวอย่างเช่นargparse คู่มือระบุว่าเราสามารถสร้าง "ตัวเลือกที่จำเป็น" (แม้ว่ามันจะบอกว่านี่คือ "โดยทั่วไปถือว่าเป็นรูปแบบที่ไม่ดี") ตัวเลือกมักจะนำหน้าด้วยเดียว ( -) หรือคู่ ( --ยาวตัวเลือก) รีบ แต่มีคำสั่งที่รู้จักกันดีว่าไม่จำเป็นต้องใช้หรือบังคับใช้การใช้งานรีบหาตัวเลือก (เช่นtar, psและdd) เป็นตัวเลือกที่สามารถตัวเองใช้อาร์กิวเมนต์ (เช่น-w80และ--color=always) หรือข้อโต้แย้งบางครั้งหลาย ๆ

"ค่าสถานะ" นั้นจากประสบการณ์ของฉันเหมือนกับตัวเลือก แต่โดยทั่วไปแล้วจะไม่ใช้การขัดแย้งกันและแสดงถึงสวิตช์แบบเปิดปิดบูลีน

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


7

ธงเป็นประเภทของตัวเลือกตัวเลือกประเภทบูลีนและมักจะเป็นเท็จโดยค่าเริ่มต้น (เช่น - verbose, --quiet, --all, - ยาว ฯลฯ )

ตัวเลือกบอกฟังก์ชั่นวิธีการกระทำ (เช่น -a, -l, --verbose, - เอาท์พุท, -name, -c, ฯลฯ ) ซึ่งข้อโต้แย้งจะบอกให้ฟังก์ชั่นว่าจะทำอย่างไรกับ / จาก (เช่น*file1, ชื่อโฮสต์ฐานข้อมูล)


ดังนั้นในความหมายของคุณใน git pull git://bla/blaที่ pullเป็นข้อโต้แย้งที่จะบอกgitสิ่งที่จะทำงานใน
Anthon

1
@Anthon ไม่มีผู้ประกอบการ (สวิทช์ / ธง / พารามิเตอร์) ข้อโต้แย้งและคำสั่ง pullเป็นคำสั่ง หนึ่งสามารถคิดของคำสั่งที่เป็นส่วนขยายของชื่อของโปรแกรมประยุกต์: ดึงคอมไพล์ < ... > git-pullเทียบเท่ากับโปรแกรมที่เรียกว่า เมื่อแอปพลิเคชันมีคำสั่งแต่ละคำสั่งจะทำให้แอปพลิเคชันทำสิ่งที่แตกต่างอย่างสิ้นเชิง
Ziggy Crueltyfree Zeitgeister

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

ธงไม่จำเป็นต้องเป็นเท็จโดยค่าเริ่มต้น หากระบุแฟล็กบนบรรทัดรับคำสั่งเพียงแค่ย้อนกลับสถานะเริ่มต้น (เปิด -> ปิดหรือปิด -> เปิด) บางคนเรียกว่าสลับเพื่อแยกความแตกต่างจากธง คนอื่นคิดว่าความแตกต่างนั้นไม่สำคัญ
cas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.