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

如何强制Bash脚本的命令行选项必须用空格分隔、不可合并

Bash 脚本修改方案

核心思路

  • 新增前置校验逻辑,直接检查原始输入参数:只要出现以-开头、不是结束符--、长度大于2且第二个字符不是-(排除长选项)的参数,就判定为合并短选项,直接报错退出
  • 修正原脚本中eval set --"$ARGS"的语法错误,在--后补空格保证参数解析正常

修改后的完整代码

#!/bin/bash

# 前置校验:禁止合并短选项
for arg in "$@"; do
    if [[ $arg == -* && $arg != -- && ${#arg} -gt 2 && ${arg:1:1} != '-' ]]; then
        echo "无效调用:禁止合并短选项,请使用空格分隔每个选项,正确格式如:temp.sh -f -c 30" >&2
        exit 1
    fi
done

ARGS=$(getopt -o c:f -l "charlie:fox" -n "temp.sh" -- "$@");

# 校验getopt解析失败的情况
if [ $? -ne 0 ]; then
    exit 1
fi

eval set -- "$ARGS";

while true; do  
    case "$1" in
        -c|--charlie)
            shift;
            if [ -n "$1" ]; then
                echo "-c =: $1";
                shift;
            fi
            ;;  
        -f|--fox)
            shift;
            echo "fox used";
            ;;      
        --)
            shift;
            break;
            ;;
    esac
done

测试效果

  • 合法调用:./temp.sh -f -c 30
    正常输出:
    fox used
    -c =: 30
    
  • 非法调用:./temp.sh -fc30 / ./temp.sh -fc 30
    直接报错退出:
    无效调用:禁止合并短选项,请使用空格分隔每个选项,正确格式如:temp.sh -f -c 30
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:03