Sự khác biệt giữa cờ, tùy chọn và đối số là gì? [đóng cửa]


14
  • ls -a(Tôi xem xét -amột lựa chọn)

  • sudo -u username( -u= tùy chọn, username= arg)

  • chmod 664 my-dir( 664= tùy chọn, my-dir= arg)

Tôi không thể nghĩ ra một ví dụ có thể nói "đây là cờ" trừ khi có thể nhìn vào danh sách dir:

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

Cái này có "cờ đọc" được đặt cho chủ sở hữu, nhưng chỉ vậy thôi. Điều gì ngăn tôi gọi đó là "tùy chọn đọc"?

Tôi viết và chỉnh sửa tài liệu kỹ thuật, chủ yếu bằng DocBook XML và tôi đang tìm kiếm một lời giải thích về sự khác biệt, phù hợp và chính xác nhất có thể. Tuy nhiên, tôi đã thấy một mô hình hình thành:

  1. cờ có xu hướng là Booleans. ví dụ,setenforce 0
  2. tùy chọn giúp xác định cách một lệnh nên hành xử. Một số có thể là tùy chọn.
  3. đối số cho biết lệnh để đối tượng hoạt động trên.

Tôi có thể thấy mình kết hợp cờ và tùy chọn (một số tùy chọn có thể có hàng tá giá trị có thể, nhưng Booleans chỉ có hai). Các đối số xuất hiện đủ khác nhau để duy trì chúng như vậy.


2
"Điều gì ngăn tôi gọi điện thoại"? Oo không có gì. Cũng như không có gì ngăn tôi gọi một cái cây.
muru

@muru - mặc dù một từ điển tiếng Anh sẽ không đồng ý với khẳng định của bạn.
DarkHeart

3
Để làm cho mọi thứ trở nên khó hiểu hơn, tôi cũng gọi một tùy chọn không lấy tham số / đối số làm cờ, như trong ls -aví dụ của bạn . (Đối với tôi, một lá cờ là một biến boolean.)
Ulrich Schwarz

3
Chúng là cũi chó ; tất cả ba mươi người trong số họ. :-)
Scott

Mẫu mà bạn nhìn thấy chỉ có ở đó vì bạn thu hẹp những thứ bạn muốn xem. Một cách để tạo tệp TAR (mà tôi đã sử dụng hơn 30 năm) và không ví dụ như giải nén nó là : tar c abc.txt > x.tar, trong đó có cmột chức năng . Bạn đang cố gắng gọi đó là một lựa chọn và điều đó hoàn toàn không phù hợp.
Anthon

Câu trả lời:


17

Không có định nghĩa nhất quán về các thuật ngữ "tùy chọn", "đối số" và "cờ" và không có cơ quan trung ương nào trong thế giới phát triển phần mềm có thể thực thi việc sử dụng chúng. Điều này xảy ra với nhiều thuật ngữ: sau hơn 30 năm sử dụng từ "thư mục", giờ đây tôi phải đối phó với những người sử dụng từ "thư mục" đã bị nhầm lẫn bởi Microsoft new-speak.

Có nhiều cách khác nhau mà các định nghĩa đồng thuận cho các thuật ngữ có thể xuất hiện trong lập trình. Trong trường hợp "đối số" / "tùy chọn" / "cờ", các hướng dẫn và hướng dẫn chính tắc cho các ngôn ngữ lập trình đã giúp thực thi việc sử dụng, cũng như các thuật ngữ được sử dụng trong các thư viện phổ biến.

Chẳng hạn, những thứ bạn đặt trên dòng lệnh sau một lệnh thường được gọi là "đối số" cho lệnh, bằng cách tương tự với các đối số cho một lệnh gọi hàm và điều này có lẽ một phần vì chúng được gọi là "đối số" trong hướng dẫn C ( do đó argcargv). Các argparsethư viện Python cũng giúp để thực thi các thuật ngữ "tranh luận". Tuy nhiên, tôi cũng đã thấy chúng được gọi là "tham số".

Thuật ngữ "tùy chọn" có nguồn gốc từ "tùy chọn", ngụ ý chúng có thể bị bỏ lại. Các getoptthư viện C là một trong những sử dụng các thuật ngữ này. Nhưng có tiền lệ cho "tùy chọn" không thực sự là tùy chọn: ví dụ: argparse hướng dẫn sử dụng nói rằng người ta có thể tạo "tùy chọn bắt buộc" (mặc dù nó cũng nói rằng "đây thường được coi là hình thức xấu"). Tùy chọn này thường được đi trước bởi một đơn ( -) hoặc kép ( --, dài tùy chọn) dấu gạch ngang, nhưng có lệnh nổi tiếng mà không yêu cầu hoặc thi hành việc sử dụng dấu gạch ngang cho các tùy chọn (ví dụ tar, psdd). Một tùy chọn có thể tự lấy một đối số (ví dụ, -w80--color=always) hoặc đôi khi nhiều đối số.

"Cờ", theo kinh nghiệm của tôi, giống như các tùy chọn, nhưng thường không tự lấy các đối số và về cơ bản đại diện cho các công tắc bật tắt boolean.

Trên một lưu ý rộng hơn, vì mọi lập trình viên đều có tùy chọn để thử và tìm kiếm một số cách làm và đặt tên tiêu chuẩn, nhưng cũng có thể phát minh lại bánh xe mà không phải trả thêm chi phí, việc đặt tên sẽ không bao giờ nhất quán. Và một khi bạn đã ghi lại mã của mình, và rõ ràng ý nghĩa mới mà bạn đã đưa ra cho những từ này bằng cách đưa ra các ví dụ, những tên và ý nghĩa đó có thể chỉ gắn bó nếu có đủ người nhận chúng từ mã của bạn.


7

Cờ là một loại tùy chọn, một tùy chọn của loại boolean và luôn luôn sai theo mặc định (ví dụ: --verbose, --quiet, --all, --long, v.v.).

Một lựa chọn cho các chức năng như thế nào để hoạt động (ví dụ -a, -l, --verbose, --output, -name, -c, vv), suýt một luận cứ nói với các chức năng để hành động / từ (ví dụ *, file1, tên máy chủ, cơ sở dữ liệu).


Vì vậy, trong định nghĩa của bạn, trong git pull git://bla/bla, pulllà một đối số cho biết gitnhững gì để làm việc trên.
Anthon

1
@Anthon không, có các toán tử (switch / flags / tham số), đối số và lệnh . pulllà một mệnh lệnh. Người ta có thể nghĩ các lệnh như phần mở rộng của tên ứng dụng: git pull <...> tương đương với một ứng dụng được gọi git-pull. Khi ứng dụng có các lệnh, mỗi lệnh làm cho ứng dụng làm một cái gì đó hoàn toàn khác nhau.
Zitgy Crueltyfree Zeitgeister

Người git có thể gọi nó là một lệnh, nhưng đó không phải lúc nào cũng được gọi là ví dụ tar, sử dụng cđể tạo được gọi là hàm . Và đó chính xác là vấn đề: không có tiêu chuẩn hóa các thuật ngữ, ngay cả khi có vẻ như bạn nghĩ rằng có câu trả lời của bạn
Anthon

một cờ không phải là sai theo mặc định. cung cấp cờ trên dòng lệnh chỉ cần đảo ngược trạng thái mặc định của nó (bật -> tắt hoặc tắt -> bật). một số người gọi đó là chuyển đổi để phân biệt với cờ. những người khác nghĩ rằng sự phân biệt là không quan trọng.
cas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.