Bash 节目放映「;“未找到命令”;

Bash 节目放映「;“未找到命令”;,bash,shell,Bash,Shell,下面的代码在第12行显示“Command not found”。我尝试了很多方法,但都没有解决。问题是什么?有人能解释一下吗 #!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; ar

下面的代码在第12行显示“Command not found”。我尝试了很多方法,但都没有解决。问题是什么?有人能解释一下吗

#!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
#!bin/bash
echo“您要输入多少号码?”
读数字
echo“按enter分隔输入”
数组=()
对于((i=0;i<$numbers;i=$i+1));
做
读取num;
数组+=($num);
完成
对于((j=0;j<$numbers-1;j=$j+1));
做
如果[“${array[$j]}”-gt“${array[$j+1]}”];
然后
节奏=${array[$j]};
数组[$j]=${array[$j+1]};
数组[$j+1]=$temp;
fi
完成
对于((i=0;i<$numbers;i=$i+1));
做
echo${array[$i]};
完成

复制将原始代码粘贴到中可获得以下有用结果:

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
parse
[
和它后面的任何内容一旦扩展为单个命令,它就无法找到

一旦修复,shellcheck将带来许多其他问题,例如定义
tempo
变量,然后引用未定义的
temp
变量


它产生的一些提示可能与您的用例无关(例如
读取
弄乱反斜杠)。应用与否取决于您自己,但了解您使用的命令的缺点始终是一件好事。

删除此类操作中的所有空格:
j=0
。它必须是:
j=0

在bash中,变量赋值的语法为:
name=[value]
。不能在
=
周围放置不带引号的空格,因为bash不会将其解释为您想要的赋值。bash将大多数单词列表视为带参数的命令


并在这一行中添加空格
if[“${array[$j]}”-gt“${array[$j+1]}”;
。它必须是
if[“${array[$j]}”-gt“${array[$j+1]}”;
。您可以在这里阅读更多有关空格的内容:

在BASH中小心使用空格。第12行应为:

 if [ "${array[$j]}" -gt "${array[$j+1]}" ];

您忘记了描述您的问题,添加了预期和实际输出,并提出了一个问题。您的shebang中缺少了一个
/
,应该是
#!/bin/bash
(我已经添加了这个作为答案,但后来注意到您说错误是在第12行抛出的,所以我想这不是您的主要问题)@BenjaminW。很抱歉给您添麻烦。我已经添加了详细信息。您能帮助我吗?您还需要在
[…]
测试中添加空格:
if[“${array[$j]}”-gt“${array[$j+1]}”;
。我在ideone.com上运行了您的代码,其中包含了我的建议,这是下一个失败的部分。下次您应该包含整个错误消息:即使
[9
部分出现在
第13行:[9:command not found
对您来说毫无意义,它是一个关于出错原因的巨大提示。在
]
之前和之后的
[
[“${array[$j]}”-gt“${array[$j+1]}”;
您是说
(())
中的
i=0
中不能有空格,因为可以有空格吗。