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

Shell 如何显示使用getopts时输入的所有无效选项?,shell,switch-statement,parameter-passing,getopts,Shell,Switch Statement,Parameter Passing,Getopts,我已经写了一个脚本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

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
退出显示无效选项的脚本,我不希望脚本进一步执行。但如果我不使用它,它将以我希望的方式显示所有无效选项,但脚本将进一步执行,这是我不希望看到的


请帮忙。谢谢。

使用一个helper变量,
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))

最后我确实提到了为什么我应该使用1号出口。太棒了。这正是我想要的。谢谢!✅