我有一个关于数组元素交换的语法问题。
array="5 3 2 1 4"
echo "${array[*]}"
changed=1
while [ $changed != 0 ]
do
changed=0
for (( i=0 ; i<=${#array[@]}-1 ; i++ ))
do
if [ ${array[$i]} -gt ${array[$i+1]} ]
then
tmp=${array[$i]}
array[$i]=${array[$i+1]}
array[$i+1]=$tmp
changed=1
fi
done
done
echo "Sorted array: "
echo "${array[*]}"
编辑:
感谢回答我的问题。我已经更改了代码,现在它看起来像这样。
但是不幸的是还有一个问题。
它显示:
jdoodle.sh: line 3: $'\r': command not found
jdoodle.sh: line 8: syntax error near unexpected token `$'\r''
jdoodle.sh: line 8: ` for ((i=0;i<=${#array[@]}-1;i++))
((...integer math...))
是首选方法,结果本身使用$((...integer math...))
(let
和expr
也可以,但相比之下有一些限制)。注意:在bash中,对于索引数组${array[i]}
,for (( i=0 ; i<${#array[@]}; i++ ))
已足够。但是,在索引内进行算术运算时,最好选择$((i+1))
。 - David C. Rankin\r\n
)作为行尾;Linux和Unix只使用\n
。请参阅man dos2unix
。 - Ljm Dullaart