如何在Bash中从字符串数组提取数值
在Bash中提取数组的数值元素
假设你有字符串数组array=("stack" "overflow" "5" "6" "question" "9"),想要生成只包含数值元素的新数组new_arr,可以用以下两种方法实现:
方法一:循环遍历判断
通过遍历数组每个元素,用正则匹配筛选出纯数字元素:
# 定义原数组 array=("stack" "overflow" "5" "6" "question" "9") # 初始化空数组用于存储结果 new_arr=() # 遍历原数组所有元素 for elem in "${array[@]}"; do # 匹配正整数(如需支持负数/小数,可修改正则为 ^-?[0-9]+(\.[0-9]+)?$) if [[ "$elem" =~ ^[0-9]+$ ]]; then new_arr+=("$elem") fi done # 输出结果验证 echo "提取的数值数组:${new_arr[@]}"
方法二:结合printf与grep过滤
利用命令行工具快速筛选,代码更简洁:
array=("stack" "overflow" "5" "6" "question" "9") # 将数组元素逐行输出后,用grep匹配纯数字,再重新赋值给新数组 new_arr=($(printf "%s\n" "${array[@]}" | grep -E '^[0-9]+$')) # 输出结果验证 echo "提取的数值数组:${new_arr[@]}"
两种方法最终都会得到new_arr=("5" "6" "9"),如果需要将元素转为整数类型,Bash会自动处理数值运算时的类型转换。
内容的提问来源于stack exchange,提问作者KAVITA SINGH
相关产品推荐
相关产品推荐

