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

如何让Bash参数替换在无等号时返回空字符串?

实现Bash参数的精准截取:仅返回等号后内容(无等号则返回空)

可以通过纯Bash参数嵌套替换实现单个表达式的需求,完全符合你保持简洁性且不依赖外部工具的要求:

${${1#*=}//${1%%=*}/}

直接把现有脚本里的"${1#*=}"替换成这个表达式即可,修改后的CLI解析循环如下:

while [[ "$#" -gt 0 ]]; do
    case $1 in
        -h=*|--help=*|-h|--help)              print_help "${${1#*=}//${1%%=*}/}";;
        -p=*|--processes=*|-p|--processes)    bootstrap_processes "${${1#*=}//${1%%=*}/}";;
        -v=*|--validate=*|-v|--validate)      validate_models "${${1#*=}//${1%%=*}/}";;
        *) printf "%s\n\n" "Unknown parameter passed: $1"; __print_help; exit 2 ;;
    esac
    shift
done

替换逻辑说明

这个嵌套替换分两步执行:

  1. 第一步:${1#*=}:标准前缀删除,删除第一个=及之前的所有字符。如果参数包含=,得到等号后的内容;如果不包含=,得到原参数本身。
  2. 第二步:${...//${1%%=*}/}:把第一步的结果中,匹配${1%%=*}的部分替换为空。
    • 当参数包含=时,${1%%=*}是等号前的内容,和第一步得到的等号后内容完全不同,替换不生效,保留等号后的内容。
    • 当参数不包含=时,${1%%=*}就是整个参数本身,和第一步得到的结果完全一致,替换后变为空字符串。

如果觉得嵌套写法有点绕,也可以用另一种逻辑等价的写法:

${1:+${1#*=}}${1%%*=}

不过第一种纯嵌套替换的可读性和简洁性更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:36:30