如何在Bash中对数组排序并将结果保存到数组变量中?
在Bash中对数组按数字序号排序并保存
首先注意:你原数组的定义存在语法错误,Bash里数组赋值时=两边不能有空格,正确的定义应该是:
array=(Testcase_5_Input_Packets Testcase_3_Input_Packets Testcase_1_Input_Packets Testcase_4_Input_Packets Testcase_2_Input_Packets)
下面提供两种实用的排序实现方法:
方法1:使用sort命令(兼容多数Bash版本)
将数组元素逐行输出后,用sort -V按字符串中的数字逻辑排序,再重新赋值给数组:
sorted_array=($(printf "%s\n" "${array[@]}" | sort -V))
sort -V会自动识别字符串中的数字序列,完美匹配你这种Testcase_N_xxx的命名格式。
要验证排序结果,可执行循环输出:
for item in "${sorted_array[@]}"; do echo "$item" done
输出结果如下:
Testcase_1_Input_Packets Testcase_2_Input_Packets Testcase_3_Input_Packets Testcase_4_Input_Packets Testcase_5_Input_Packets
方法2:使用Bash内置readarray(Bash 4.3+版本)
如果你的Bash版本是4.3或更高,推荐用readarray结合排序命令,这种方式能安全处理包含空格的数组元素:
readarray -t sorted_array < <(printf "%s\n" "${array[@]}" | sort -V)
补充:直接覆盖原数组
如果不需要保留原数组,可直接将排序结果存回原数组:
# 方式1 array=($(printf "%s\n" "${array[@]}" | sort -V)) # 方式2(更安全) readarray -t array < <(printf "%s\n" "${array[@]}" | sort -V)
内容的提问来源于stack exchange,提问作者Farah Bayomi
相关产品推荐
相关产品推荐

