Shell
如何處理 shell 腳本中的開關?
是否有一些內置工具可以將
-x
和辨識--xxxx
為開關,而不是參數,或者您是否必須檢查所有輸入變數,測試破折號,然後解析參數?
使用
getopts
.它是相當可移植的,因為它在 POSIX 規範中。不幸的是,它不支持長選項。
另請參閱由 bash-hackers wiki 提供的本
getopts
教程和來自 stackoverflow的這個問題。如果您只需要簡短的選項,
getopts
則(使用非靜默錯誤報告)的典型使用模式是:# process arguments "$1", "$2", ... (i.e. "$@") while getopts "ab:" opt; do case $opt in a) aflag=true ;; # Handle -a b) barg=$OPTARG ;; # Handle -b argument \?) ;; # Handle error: unknown option or missing required argument. esac done
我假設您使用的是 bash 或類似的。一個例子:
all=false long=false while getopts ":hal" option; do case $option in h) echo "usage: $0 [-h] [-a] [-l] file ..."; exit ;; a) all=true ;; l) long=true ;; ?) echo "error: option -$OPTARG is not implemented"; exit ;; esac done # remove the options from the positional parameters shift $(( OPTIND - 1 )) ls_opts=() $all && ls_opts+=( -a ) $long && ls_opts+=( -l ) # now, do it ls "${ls_opts[@]}" "$@"