下面的代码在第12行显示“未找到命令”。我尝试了很多方法,但没有解决。问题是什么?有人能解释一下吗?
#!bin/bash
echo "How many number do you want to input?"
read numbers
echo "Give your input seperated by enter"
array=()
for (( i = 0 ; i < $numbers ; i=$i+1 ));
do
read num;
array+=($num);
done
for (( j = 0 ; j < $numbers-1 ; j=$j+1 ));
do
if ["${array[$j]}" -gt "${array[$j+1]}"];
then
tempo=${array[$j]};
array[$j]=${array[$j+1]};
array[$j+1]=$temp;
fi
done
for (( i = 0 ; i < $numbers ; i=$i+1 ));
do
echo ${array[$i]};
done
答案 0 :(得分:0)
将原始代码复制粘贴到shellcheck.net中会带来这个有用的结果:
Line 13:
if ["${array[$j]}" -gt "${array[$j+1]}"];
^-- SC1009: The mentioned parser error was in this if expression.
^-- SC1035: You need a space after the [ and before the ].
^-- SC1073: Couldn't parse this test expression.
^-- SC1020: You need a space before the ].
^-- SC1072: Missing space before ]. Fix any mentioned problems and try again.
这是你的第一个问题,一个语法错误使得bash
解析[
以及它作为单个命令扩展后的任何内容,它无法找到。
修复后,shellcheck将能够解决许多其他问题,例如定义tempo
变量,然后引用未定义的temp
变量。
它产生的一些提示可能与您的用例无关(例如read
重复反斜杠)。是否可以应用它们,但了解您正在使用的命令的缺点总是一件好事。
答案 1 :(得分:0)
删除此操作中的所有空格:j = 0
。必须是:j=0
在bash中,变量赋值的语法为:name=[value]
。你不能在=
周围放置不带引号的空格,因为bash不会将此解释为你想要的任务。 Bash将大多数单词列表视为带参数的命令。
并在此行if ["${array[$j]}" -gt "${array[$j+1]}"];
中添加空格。它必须是if [ "${array[$j]}" -gt "${array[$j+1]}" ];
。您可以在此处阅读更多空格:Why should there be a space after '[' and before ']' in Bash?
答案 2 :(得分:0)
小心你在BASH的空间。第12行应为:
if [ "${array[$j]}" -gt "${array[$j+1]}" ];