用于bubblesort的给定bash脚本中的错误在哪里?

时间:2017-10-12 13:31:37

标签: bash bubble-sort

array=( $(<abc.txt) )
len=${#array[*]}
i=0
while [ $i -lt "$len" ]
do
 j=0
 while [ $j -lt $(( (len - 1)) - i)) ]
 do
  k=$((j + 1))
  if [ "${array[$j]}" -gt "${array[$k]}" ]
  then
   temp=${array[$j]}
   array[$j]=${array[$k]}
   array[$k]=$temp
  fi
 j=$k
 done
i=$((i + 1))
done
echo "${array[@]}"

我的数组没有排序,我也收到一条消息&#34;:整数表达式预期&#34;。它在我朋友的电脑上工作正常。我只想从另一个文件获取输入到数组然后使用bubblesort。如果我将数组声明为array =(1 2 3 4 9 8 7 6 5),它也可以正常工作。

1 个答案:

答案 0 :(得分:0)

你的括号在第二个while语句中没有匹配,我改变了 len声明。 chepner是正确的,shellcheck.net会为你解决这个问题。 (您甚至可以在本地安装shellcheck。)

#!/bin/bash
#array=($(<abc.txt))
array=(1 2 3 4 9 8 7 6 5)
len=${#array[@]}
i=0
while [ $i -lt "$len" ]
do
 j=0
 while [ $j -lt "$(( ( len - 1 ) - i))" ]
 do
  k=$((j + 1))
  if [ "${array[$j]}" -gt "${array[$k]}" ]
  then
   temp=${array[$j]}
   array[$j]=${array[$k]}
   array[$k]=$temp
  fi
 j=$k
 done
i=$((i + 1))
done
echo "${array[@]}"