1

我在下面编写了使用长选项的代码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
4

1 回答 1

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 
于 2014-02-06T09:57:15.943 回答