方法一:
步骤:
- 使用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 复制代码
网络异常,图片无法展示
|