Khi sử dụng rm
với cả hai -i
và -f
tùy chọn, cái đầu tiên sẽ bị bỏ qua. Điều này được ghi lại trong tiêu chuẩn 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.
và cũng trong info
trang 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.
Hãy xem những gì xảy ra dưới mui xe:
rm
xử lý tùy chọn của nó với getopt(3)
, cụ thể getopt_long
. Hàm này sẽ xử lý các đối số tùy chọn trong dòng lệnh ( **argv
) theo thứ tự xuất hiện:
Nếu getopt () được gọi lặp đi lặp lại, nó sẽ trả về liên tiếp từng ký tự tùy chọn từ mỗi thành phần tùy chọn.
Hàm này thường được gọi trong một vòng lặp cho đến khi tất cả các tùy chọn được xử lý. Từ quan điểm chức năng này, các tùy chọn được xử lý theo thứ tự. Tuy nhiên, điều thực sự xảy ra là phụ thuộc vào ứng dụng, vì logic ứng dụng có thể chọn phát hiện các tùy chọn xung đột, ghi đè lên chúng hoặc đưa ra lỗi. Đối với trường hợp rm
và i
và f
lựa chọn, họ hoàn toàn ghi đè eachother. Từ 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;
Cả hai tùy chọn đều đặt cùng một biến và trạng thái của các biến này sẽ là tùy chọn nào là cuối cùng trong dòng lệnh. Hiệu quả của việc này là phù hợp với tiêu chuẩn POSIX và rm
tài liệu hướng dẫn.