使用长选项正确使用 bash getopts

use*_*107 1 bash getopts

我写了下面的代码来使用长选项和getopts,但它不起作用(参数对变量的值没有影响)。什么是正确的语法?

while getopts "c:(mode)d:(file1)e:(file2)" opt; do
  case $opt in
  -c|--mode)
      mode=$OPTARG
      ;;  
  -d|--file1)
      file1=$OPTARG
      ;;  
  -e|--file2)
      file2=$OPTARG
      ;;  
  esac
done
Run Code Online (Sandbox Code Playgroud)

use*_*107 8

我发现有问题的代码是 forksh而不是bash。因为getopts我们不能使用长选项。我最终手动解析参数如下

while test -n "$1"; do
    case "$1" in
      -c|--mode)
          mode=$2
          shift 2
          ;;  
      -d|--file1)
          file1=$2
          shift 2
          ;;  
      -e|--file2)
          file2=$2
          shift 2
          ;;  
    esac
done 
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我一直都是这样做的;我通常有一个 `*)` 情况会离开循环,因此可以在选项之后解析参数。 (2认同)