Arrays 气泡排序外壳,无输出

Arrays 气泡排序外壳,无输出,arrays,bash,shell,bubble-sort,Arrays,Bash,Shell,Bubble Sort,我遇到了一个问题,我试图在shell中使用冒泡排序,我不确定我的问题发生在哪里,因为我假设我的排序是正确的。我没有得到一个错误,但我根本没有排序的数字 #!/bin/bash array=( "$@" ) #echo ${array[@]} print all elements in the array if [ $# -gt 9 ] then echo Too many arguments, run the program over again exit fi j=0 f

我遇到了一个问题,我试图在shell中使用冒泡排序,我不确定我的问题发生在哪里,因为我假设我的排序是正确的。我没有得到一个错误,但我根本没有排序的数字

#!/bin/bash

array=( "$@" )
#echo ${array[@]} print all elements in the array

if [ $# -gt 9 ]
then
    echo Too many arguments, run the program over again
    exit
fi

j=0
flag=1
a=${#array[@]}

for((j=0;j < $a - 1 && flag==1 ;j++))
do
flag=0
for((i=0; i< $a-j-1; i++))
do
    x=${array[$i]}
    y=${array[$i+1]}
if ((x>y))
then
    flag=1
    export temp=$x 
    export x=$y 
    export y=$temp
fi
done
done

echo "Sorted Array: " ${array[@]}
#/bin/bash
数组=(“$@”)
#echo${array[@]}打印数组中的所有元素
如果[$#-gt 9]
然后
回显太多参数,请重新运行程序
出口
fi
j=0
标志=1
a=${#数组[@]}
对于((j=0;j<$a-1&&flag==1;j++)
做
标志=0
(i=0;i<$a-j-1;i++)
做
x=${array[$i]}
y=${array[$i+1]}
如果((x>y))
然后
标志=1
出口温度=$x
出口x=$y
导出y=$temp
fi
完成
完成
echo“排序数组:${Array[@]}

正如注释中指出的,可以交换变量
x
y
,但不能交换任何数组项。而不是

x=${array[$i]}
y=${array[$i+1]}
if ((x>y)); then
    flag=1
    export temp=$x 
    export x=$y 
    export y=$temp
fi


更好的起点是使用
PS4=':$LINENO+'bash-x yourscript
观察运行时行为,记录执行的每个命令,找出脚本没有达到预期效果的第一个地方,然后编写一个更窄的问题,只反映shell部分的一个孤立的意外行为,不是(有效地)要求人们为你调试脚本。顺便说一句,
导出
s有什么用?脚本的任何部分都不会修改
数组
。你知道有
排序
,所以这只是为了好玩,对吗?@Renardo
如果((x>y))
部分是正确的。请注意双括号。谢谢,我甚至没有注意到这一点。这解决了我的问题
x=${array[$i]}
y=${array[$i+1]}
if ((x>y)); then
    flag=1
    array[$i]="$y"
    array[$i+1]="$x"
fi