如何在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→ 输出错误:错误:输入必须包含至少两个'-'
代码说明
- 输入验证:通过循环遍历字符串,每次去掉第一个
-之前的内容,统计-的总数,确保数量≥2。 - 参数扩展拆分:
${input%%-*}:从字符串末尾匹配第一个-,删除该位置及之后的内容,得到第一部分。${input#*-}:从字符串开头匹配第一个-,删除该位置及之前的内容,得到剩余字符串。- 对剩余字符串重复上述操作,拆分出第二部分和合并后的剩余内容。
- 数组赋值:用双引号包裹每个部分,确保包含空格等特殊字符的字符串也能被正确存储。
内容的提问来源于stack exchange,提问作者Papi Abi
相关产品推荐
相关产品推荐

