You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中getopts模板':x:y-:'末尾的'-'符号含义是什么?

关于getopts中:x:y-:模板的含义解析

先拆解getopts ':x:y-:' val里每个部分的作用:

  • 开头的::开启静默错误模式。默认情况下,getopts遇到未知选项或选项缺少参数时会自动输出错误提示,加了这个:后,错误提示会被抑制,需要你在代码里自行处理(比如遇到未知选项时val会被设为?,选项缺参数时val设为:)。
  • x:和y::表示短选项-x和-y都必须携带参数。这里的:是标记该选项需要接收后续参数,比如执行脚本时得写-x 123或-y abc,参数会被存在OPTARG变量里。
  • 末尾的-::这是用来兼容处理**长选项(--开头的选项)**的特殊语法:
    • 当命令行中出现--foo或--bar=xxx这类长选项时,getopts会把val设为-,同时将长选项的内容(不带开头的--)赋值给OPTARG。比如--foo会让OPTARG等于foo,--bar=test会让OPTARG等于bar=test。
    • 后面的:表示这些长选项也可以携带参数,和短选项的:作用一致,支持--bar=test或--bar test两种传参形式。

举个简单的使用示例:

while getopts ':x:y-:' val; do
  case "$val" in
    x) echo "短选项-x的参数:$OPTARG" ;;
    y) echo "短选项-y的参数:$OPTARG" ;;
    -)
      # 处理长选项
      case "$OPTARG" in
        help) echo "显示帮助信息" ;;
        output=*)
          file="${OPTARG#*=}"
          echo "输出文件路径:$file" ;;
        *) echo "未知长选项:--$OPTARG" ;;
      esac
      ;;
    :) echo "选项-$OPTARG 缺少参数" ;;
    \?) echo "未知短选项:-$OPTARG" ;;
  esac
done

当执行./test.sh -x hello --output=result.txt时,会输出:

短选项-x的参数:hello
输出文件路径:result.txt

内容的提问来源于stack exchange,提问作者StudentOrint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:05:36