เมื่อใช้rm
กับทั้ง ตัวเลือก-i
และ-f
ตัวเลือกแรกจะถูกละเว้น นี่เป็นเอกสารในมาตรฐานPOSIX :
-f
Do not prompt for confirmation. Do not write diagnostic messages or modify
the exit status in the case of nonexistent operands. Any previous
occurrences of the -i option shall be ignored.
-i
Prompt for confirmation as described previously. Any previous occurrences
of the -f option shall be ignored.
และในinfo
หน้าGNU ด้วย:
‘-f’
‘--force’
Ignore nonexistent files and missing operands, and never prompt the user.
Ignore any previous --interactive (-i) option.
‘-i’
Prompt whether to remove each file. If the response is not affirmative, the
file is skipped. Ignore any previous --force (-f) option.
ลองดูสิ่งที่เกิดขึ้นภายใต้ประทุน:
rm
ประมวลผลตัวเลือกที่มีเฉพาะgetopt(3)
getopt_long
ฟังก์ชันนี้จะประมวลผลอาร์กิวเมนต์ตัวเลือกในบรรทัดคำสั่ง ( **argv
) ตามลำดับที่ปรากฏ:
หาก getopt () ถูกเรียกซ้ำ ๆ กันมันจะส่งคืนอักขระแต่ละตัวเลือกอย่างต่อเนื่องจากองค์ประกอบตัวเลือกแต่ละตัว
ฟังก์ชั่นนี้มักจะเรียกว่าเป็นวงจนกว่าตัวเลือกทั้งหมดจะถูกประมวลผล จากมุมมองฟังก์ชั่นนี้ตัวเลือกที่มีการประมวลผลตามลำดับ อย่างไรก็ตามสิ่งที่เกิดขึ้นจริงขึ้นอยู่กับแอปพลิเคชันเนื่องจากตรรกะของแอปพลิเคชันสามารถเลือกที่จะตรวจสอบตัวเลือกที่ขัดแย้งกันแทนที่พวกเขาหรือแสดงข้อผิดพลาด สำหรับกรณีrm
และi
และf
ตัวเลือกพวกเขาเขียนทับแต่ละคนได้อย่างสมบูรณ์แบบ จากrm.c
:
234 case 'f':
235 x.interactive = RMI_NEVER;
236 x.ignore_missing_files = true;
237 prompt_once = false;
238 break;
239
240 case 'i':
241 x.interactive = RMI_ALWAYS;
242 x.ignore_missing_files = false;
243 prompt_once = false;
244 break;
ตัวเลือกทั้งสองตั้งค่าตัวแปรเดียวกันและสถานะของตัวแปรเหล่านี้จะเป็นตัวเลือกใดก็ตามที่อยู่ในบรรทัดคำสั่ง ผลของสิ่งนี้สอดคล้องกับมาตรฐาน POSIX และrm
เอกสารประกอบ