当一个选项缺少其相关参数时,为什么没有以bash格式获取:(每个文档)?

时间:2017-07-21 15:35:32

标签: bash shell getopts

我对这个领域比较陌生,我正在运行名为" statsrandomrun.sh"的shell脚本。使用以下代码段:

#!/bin/bash
while getopts "m:s:xh" opt; do
  case $opt in
    m)
      MU=$OPTARG; mflag=true; ;;
    s)
      SIGMA=$OPTARG; sflag=true; ;;
    h)
      usage; exit;;
    x)
      xflag=true ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "HaHa! Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

但似乎每当我通过这个命令

/.statsrandomrun.sh -m 

我从未见过

echo "HaHa! Option -$OPTARG requires an argument." >&2

工作,我在上面的代码片段中实现了。我的bash只是向我展示了一些其他消息:

option requires an argument -- m

我显然没有放入我的代码。还有另一行

Invalid option: -

我希望这会发生,因为help getopts的输出包含以下内容:

  

如果找不到必需的参数,则getopts会发出一个':'进入NAME并将OPTARG设置为找到的选项字符。

发生了什么事?有任何想法吗? 我提前感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

根据文档,add

  

getopts:getopts optstring name [arg]

     

OPTSTRING包含要识别的选项字母;如果一封信      后跟一个冒号,期望有一个参数,      白色空间应该与它分开。

     

getopts以两种方式之一报告错误。如果是第一个字符      OPTSTRING是一个冒号,getopts使用无提示错误报告。在      此模式下,不会打印任何错误消息。 ................ 如果一个      找不到必需的参数,getopts将':'放入NAME和      将OPTARG设置为找到的选项字符。如果没有getopts      静音模式,...........如果找不到必需的参数,'?'      放置在NAME中,取消设置OPTARG,并显示诊断消息      打印。

当我在非沉默模式中实现我的getopts功能时,=SUMPRODUCT((NOT(MOD(ROW($8:$22), 2))*D$8:D$22), (MOD(ROW($9:$23), 2)*D$9:D$23)) 触发class Application extends React.Component{ render(){ return( <div> <button onClick={() => alert("hello world")}>Hello Application</button> </div> ) } } ReactDOM.render(<Application />,document.getElementById("tar")); 之后的这个缺失参数将存储在help getopts中(在我的情况下) /.statsrandomrun.sh -m内没有任何内容的?}。

所以执行了这些代码行:

$Name

与{em>内置诊断 msg一起生成$opt

取而代之的是得到我想要的结果,我应该使用沉默模式,如

$OPTARG

在OPTSTRING中添加前面的冒号。