如何使用BASH扩展过滤数组中不匹配指定前缀的元素
Bash数组过滤保留指定前缀元素解决方案
问题描述
需要移除数组中所有不匹配指定前缀的元素,仅保留匹配前缀的项,示例场景如下:
现有数组:
array=(elem1:a elem1:b elem2:a elem2:b) prefix=elem1:
期望处理后得到的新数组为 (elem1:a elem1:b)。
解决方案
推荐使用纯Bash内置逻辑实现,无需调用外部命令,兼容性和性能更优:
# 遍历原数组过滤匹配项 filtered_array=() for elem in "${array[@]}"; do # 匹配元素开头是否为指定前缀 [[ $elem == "$prefix"* ]] && filtered_array+=("$elem") done # 验证输出 echo "${filtered_array[@]}" # 输出结果:elem1:a elem1:b
补充说明
- 该写法兼容所有常见Bash版本,且支持元素包含空格、特殊符号的场景,不会出现异常拆分问题。
- 若追求简洁写法且确认数组元素无空格,可使用grep简化实现:
filtered_array=( $(grep ^"$prefix" <<<"${array[*]}") )
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

