如何显示使用 getopts 时输入的所有无效选项?

How to show ALL the invalid options entered when getopts is used?

我写了一个脚本myscript:

while getopts "t:" opt; do
  case ${opt} in
    t )
      target=$OPTARG
      ;;
   
    * )
      echo "Invalid option: $OPTARG requires an argument" 
      exit 1;
      ;;
  esac
done
shift $((OPTIND -1))

如果我输入像

这样的输入
$ myscript -eio

它只显示

Invalid option: e 

我希望它显示我传递的所有无效选项,例如:

Invalid option: e
Invalid option: i
Invalid option: o

我已经使用 exit 1 退出显示无效选项的脚本,我不希望脚本执行任何 further.But 如果我不使用它,它将显示所有我想要的无效选项但是,脚本将进一步执行,这是我想要的。

请帮忙。谢谢。

使用辅助变量,invalid 记录任何无效选项。选项解析循环完成后,对其进行测试。

invalid=false
while getopts "t:" opt; do
  case ${opt} in
    (t)
      target=$OPTARG
      ;;
   
    (*)
      echo "Invalid option: $OPTARG requires an argument" 
      invalid=true
      ;;
  esac
done
case $invalid in
   (true) exit 1;;
esac

shift $((OPTIND -1))