两次相同的旗帜

时间:2017-10-02 08:00:48

标签: bash shell printing getopts

您好我有一个基本问题,但我无法找到一个好的答案

我有这个代码:

while getopts :weco:r:u:hP: ARG; do
  case $ARG in
             .
             .
             .

    h)  #set option "h" - show help;
      help
      ;;
    P)  #set option "P" - select Printer;
      PRINTER=$OPTARG
      ;;
    \?) #unrecognized option - show help
      echo -e \\n"Option not recognized."
      help
      ;;
  esac
done

现在我想要使用“-P”两次,如果你使用“-P PRINTER”它使用给定的打印机,但如果你只使用“-P”它使用从文件中读出的默认值。

我能这样管理吗?对不起,如果这是正确的答案,我现在无法测试。

while getopts :weco:r:u:hP:P ARG; do
  case $ARG in
             .
             .
             .

    h)  #set option "h" - show help;
      help
      ;;
    P)  #set option to use default
      PRINTER=BLAFOO
    P)  #set option "P" - select Printer;
      PRINTER=$OPTARG
      ;;
    \?) #unrecognized option - show help
      echo -e \\n"Option not recognized."
      help
      ;;
  esac
done

1 个答案:

答案 0 :(得分:0)

我建议你重新编写自己的参数解析器,因为getopts不支持你想要的。

while true; do
  case $1 in
    -h)  #set option "h" - show help;
      echo help
      shift
      ;;
    -P)  #set option "P" - select Printer;
      shift
      case $1 in
      ""|-*)
        PRINTER=BLAFOO
        ;;
      *)
        PRINTER=$1
        shift
        ;;
      esac
      # echo PRINTER=$PRINTER
      ;;
    -*|*)  #unrecognized option - show help
      echo -e \\n"Option not recognized."
      echo help
      break ;;
  esac
done