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

如何在Bash中仅按前两个'-'将字符串拆分为数组?

在Bash中按前两个'-'拆分字符串为数组(仅用内置功能)

实现思路

先验证输入字符串包含至少两个-,再通过Bash内置的参数扩展完成拆分,全程不依赖外部命令。

完整代码

#!/bin/bash

# 接收输入字符串
input="$1"

# 纯Bash内置统计'-'的数量
dash_count=0
temp="$input"
while [[ "$temp" == *-* ]]; do
    ((dash_count++))
    temp="${temp#*-}"
done

# 验证输入合法性
if (( dash_count < 2 )); then
    echo "错误:输入必须包含至少两个'-'" >&2
    exit 1
fi

# 拆分前两个'-'
part1="${input%%-*}"
remaining="${input#*-}"
part2="${remaining%%-*}"
part3="${remaining#*-}"

# 存入数组
result_arr=("$part1" "$part2" "$part3")

# 按示例格式输出结果
IFS=, printf "[%s]\n" "${result_arr[*]}"

测试示例

  • 输入:a-b-c-d-e → 输出:[a,b,c-d-e]
  • 输入:a-b-c → 输出:[a,b,c]
  • 输入:abd-der-asd-d → 输出:[abd,der,asd-d]
  • 输入:a-b → 输出错误:错误:输入必须包含至少两个'-'

代码说明

  1. 输入验证:通过循环遍历字符串,每次去掉第一个-之前的内容,统计-的总数,确保数量≥2。
  2. 参数扩展拆分:
    • ${input%%-*}:从字符串末尾匹配第一个-,删除该位置及之后的内容,得到第一部分。
    • ${input#*-}:从字符串开头匹配第一个-,删除该位置及之前的内容,得到剩余字符串。
    • 对剩余字符串重复上述操作,拆分出第二部分和合并后的剩余内容。
  3. 数组赋值:用双引号包裹每个部分,确保包含空格等特殊字符的字符串也能被正确存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:10:53