📅  最后修改于: 2023-12-03 14:52:34.466000             🧑  作者: Mango
在 Shell 编程中,对于常规操作,会经常需要对数组进行操作。其中一个常见需求是对数组进行排序。本文将介绍在 Shell 脚本中如何对数组进行排序的方法。
对于一个数字数组,可以使用内置命令 sort
来排序:
#!/bin/bash
numbers=(8 3 1 6 4 7 5 2)
sorted_numbers=($(echo "${numbers[@]}" | tr ' ' '\n' | sort -n))
echo "原数组:${numbers[@]}"
echo "排序后的数组:${sorted_numbers[@]}"
上述代码定义了一个数字数组 numbers
,然后通过 $()
命令替换将数组元素转成单独的行,通过 tr
命令将空格替换成换行符后,传递给 sort
命令进行排序。最后再通过 $()
命令替换将已排序的行转成数组元素,保存到 sorted_numbers
数组中。
输出结果为:
原数组:8 3 1 6 4 7 5 2
排序后的数组:1 2 3 4 5 6 7 8
对于一个字符串数组,可以使用 sort
命令的默认排序方式进行排序,即按照字典序进行排序:
#!/bin/bash
fruits=("apple" "orange" "banana" "grape" "watermelon")
sorted_fruits=($(echo "${fruits[@]}" | tr ' ' '\n' | sort))
echo "原数组:${fruits[@]}"
echo "排序后的数组:${sorted_fruits[@]}"
上述代码定义了一个字符串数组 fruits
,同样是通过 $()
命令替换将数组元素转成单独的行,然后通过 sort
命令对其进行排序。最后同样是通过 $()
命令替换将已排序的行转成数组元素,保存到 sorted_fruits
数组中。
输出结果为:
原数组:apple orange banana grape watermelon
排序后的数组:apple banana grape orange watermelon
有时候需要按照数组下标的大小来排序,可以通过 sort
命令实现:
#!/bin/bash
numbers=(8 3 1 6 4 7 5 2)
sorted_indexes=($(echo "${!numbers[@]}" | tr ' ' '\n' | sort -n))
echo "原数组:${numbers[@]}"
echo "排序后的数组下标:${sorted_indexes[@]}"
echo "排序后的数组:${numbers[${sorted_indexes[0]}]} ${numbers[${sorted_indexes[1]}]} ${numbers[${sorted_indexes[2]}]} ${numbers[${sorted_indexes[3]}]} ${numbers[${sorted_indexes[4]}]} ${numbers[${sorted_indexes[5]}]} ${numbers[${sorted_indexes[6]}]} ${numbers[${sorted_indexes[7]}]}"
上述代码首先通过 ${!numbers[@]}
获取数组下标,同样通过 $()
命令替换将下标转成单独的行,然后通过 sort
命令对其进行排序。最后通过 ${sorted_indexes[index]}
取出排序后的下标去访问原始数组,从而获取排序后的值。
输出结果为:
原数组:8 3 1 6 4 7 5 2
排序后的数组下标:0 1 2 3 4 5 6 7
排序后的数组:1 2 3 4 5 6 7 8
以上是在 Shell 脚本中对数组进行排序的几种方法,可以根据具体数组类型和排序需求进行选择。