簡體   English   中英

如何允許任何順序的非選項參數getopt?

[英]How to allow non-option arguments in any order to getopt?

我有一個C程序,期望用幾個選項和一個非選項參數調用(即沒有相關的選項字母),並使用getopt來解析這些選項。 例如,它可以通過以下方式調用:

例1: myProgram -a "aParam" -b "bParam" "xParam"

我一直在使用SLES10,這些選項可以按任何順序使用。 例如,非選項參數“xParam”可能首先出現:

例2: myProgram "xParam" -a "aParam" -b "bParam"

但是,在SLES11中進行測試時,似乎getopt一旦到達非選項參數就會停止處理,因此上面的示例2不起作用。

我已經閱讀了getopt手冊頁,看到這可能是相關的:

如果optstring的第一個字符是'+'或者設置了環境變量POSIXLY_CORRECT,則只要遇到nonoption參數,選項處理就會停止。

我不確定SLES11默認是否設置POSIXLY_CORRECT。 在SLES11中獲取舊SLES10 getopt行為的最佳方法是什么?

事實證明,默認情況下它重定向到_posix_getopt(),這導致我上面描述的行為。

我最終找到了可能的解決方案:

  1. 請改用getopt_long()。 這似乎沒有posix等價物。
  2. 定義_GNU_SOURCE,停止重定向。
  3. 手動重新排序參數,可能使用包裝器shell腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM