使用长选项正确使用bash getopts

时间:2014-02-06 09:33:43

标签: 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

1 个答案:

答案 0 :(得分:4)

我发现相关代码适用于ksh而不是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