方法一:
步骤:
- 使用tr命令将数组内每个元素之间的空格替换为换行符;
- 之后使用sort命令按从小到大重新排序;
- 最后使用for循环遍历排序后的元素值。通过下标值重新定义数组中的每个元素。
[root@yuji sh]# vim paixu1.sh
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "原数组的顺序为:${arr[@]}"
#将每个元素之间的空格替换为换行符,然后重新排序
list=$(echo ${arr[@]} | tr ' ' '\n' | sort -n)
a=0
for i in $list
do
#通过下标值定义数组中的每个元素
newarr[$a]=$i
let a++
done
echo "排序后的数组顺序为:${newarr[@]}"
[root@yuji sh]# bash p1.sh
原数组的顺序为:63 4 24 1 3 15
排序后的数组顺序为:1 3 4 15 24 63
方法二:
for循环遍历排序后的元素值,直接定义数组中的每个元素。
[root@yuji sh]# vim p2.sh
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "原数组的顺序为:${arr[@]}"
#将每个元素之间的空格替换为换行符,然后重新排序
list=$(echo ${arr[@]} | tr ' ' '\n' | sort -n)
for i in $list
do
newarr+=($i)
done
echo "排序后的数组顺序为:${newarr[@]}"
[root@yuji sh]# bash p2.sh
原数组的顺序为:63 4 24 1 3 15
排序后的数组顺序为:1 3 4 15 24 63
方法三:
先定义列表,再引用列表的值定义数组。
[root@yuji sh]# arr=(63 4 24 1 3 15)
[root@yuji sh]# echo ${arr[@]} |tr ' ' '\n' |sort -n
1
3
4
15
24
63
[root@yuji sh]# list=$(echo ${arr[@]} |tr ' ' '\n' |sort -n)
[root@yuji sh]# echo $list
1 3 4 15 24 63
[root@yuji sh]# newarr=($list)
[root@yuji sh]# echo ${newarr[@]}
1 3 4 15 24 63
方法四:
[root@yuji sh]# arr=(63 4 24 1 3 15)
[root@yuji sh]# echo ${arr[@]} |tr ' ' '\n' |sort -n 1
3
4
15
24
63
[root@yuji sh]# new=(`echo ${arr[@]} |tr ' ' '\n' |sort -n`)
[root@yuji sh]# echo ${new[@]}
1 3 4 15 24 63
注意事项:
使用echo输出变量值时,变量是否加双引号会影响输出的结果:
- 使用
echo $list输出变量值时,会将变量值中的换行符都替换成空格。 - 使用
echo "$list"输出变量值时,可正常输出变量值中的换行符。 echo '$list'只会把 $list 当成普通的字符串,因为单引号无法引用变量值。
[root@yuji sh]# echo $list
1 3 4 15 24 63
[root@yuji sh]# echo "$list"
1
3
4
15
24
63
[root@yuji sh]# echo '$list'
$list