getopts 智慧位置引數解析
選項
optstring
:要識別的選項字元如果一個字元後面跟一個冒號,那麼該選項應該有一個引數,該引數應該用空格分隔。冒號(
:
)和問號(?
)不能用作選項字元。
每次呼叫它時,getopts
將下一個選項放在 shell 變數名中,如果名稱不存在則初始化名稱,以及要處理到變數 OPTIND
中的下一個引數的索引。每次呼叫 shell 或 shell 指令碼時,OPTIND
都會初始化為 1
。
當一個選項需要一個引數時,getopts
將該引數放入變數 OPTARG
中。shell 不會自動重置 OPTIND
; 如果要使用一組新引數,則必須在同一 shell 呼叫內多次呼叫 getopts
之間手動重置。
遇到選項結束時,getopts
將以大於零的返回值退出。
OPTIND
設定為第一個非選項引數的索引,name 設定為 ?
。getopts
通常會解析位置引數,但如果在 args
中給出了更多的引數,則 getopts
會解析這些引數。
getopts
可以通過兩種方式報告錯誤。如果 optstring
的第一個字元是冒號(:
),則使用靜默錯誤報告。在正常操作中,遇到無效選項或缺少選項引數時,將列印診斷訊息。
如果變數 OPTERR
設定為 0
,則即使 optstring
的第一個字元不是冒號,也不會顯示錯誤訊息。
如果看到無效選項,則 getopts
將 ?
放入 name
,如果不是靜音,則列印錯誤訊息並取消設定 OPTARG
。如果 getopts
是靜默的,則找到的選項字元放在 OPTARG
中,並且不會列印診斷訊息。
如果找不到必需的引數,並且 getopts
沒有靜音,則在 name
中放置一個問號(?
),取消設定 OPTARG
,並列印診斷訊息。如果 getopts
是靜音的,則在名稱中放置冒號(:
),並將 OPTARG
設定為選項字元。