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

Bash脚本校验第二参数格式 提示双引号传参的实现方法

Bash脚本第二个参数格式校验实现方法

双引号是Shell命令行层面的解析标识,不会作为字符传入脚本内部,因此无法直接检测参数外层是否包裹双引号,可通过传参后的实际特征做判断:正确传参时第二个参数是包含|分隔符的完整字符串,脚本收到的参数总数固定为2;未加双引号时|会被Shell识别为管道符,要么直接触发命令不存在的报错,要么传入的第二个参数不含|、参数总数不符合预期。

具体实现步骤

在原有脚本的最开头添加如下校验逻辑:

#!/bin/sh

# 参数校验逻辑
if [ $# -ne 2 ] || ! echo "$2" | grep -q '|'; then
    echo "参数格式错误,请为第二个参数添加双引号后重新运行"
    echo "正确执行示例:sh $0 status \"ADC|DLM|MBS|ENDB\""
    exit 1
fi

# ----- 以下是原有业务逻辑 -----
ACTION="$1"
# 按|拆分第二个参数逐行输出
echo "$2" | tr '|' '\n' | while read -r item; do
    echo "$ACTION $item"
done

逻辑说明

  • 第一层校验判断传入脚本的参数总数是否为2,不符合则直接判定传参错误
  • 第二层校验判断第二个参数中是否包含|分隔符,不包含则说明参数被Shell提前拆分,属于未按要求加双引号的场景
  • 校验不通过时直接打印正确执行示例,退出脚本返回非0状态码
  • 如果需要更严格的格式校验,可以将grep的匹配规则替换为业务对应的正则,比如grep -Eq '^(ADC|DLM|MBS|ENDB)(\|(ADC|DLM|MBS|ENDB))*$',限定第二个参数只能由指定枚举值通过|拼接而成。

测试验证:加双引号执行sh /tmp/tesh.sh status "ADC|DLM|MBS|ENDB"时,校验通过,会逐行输出status ADC、status DLM、status MBS、status ENDB;未加双引号执行时,要么触发Shell管道命令报错,要么被脚本校验拦截,提示正确用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:15:41