Shell

如何處理 shell 腳本中的開關?

  • October 17, 2014

是否有一些內置工具可以將-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[@]}" "$@"

引用自:https://unix.stackexchange.com/questions/20975