代码是:
echo -n "Enter the number you want to search for"
read number1
for i in `seq 1 $N`
do
temp= $number1
if [ temp -eq ${array[$index]} ]
then
temp= $index
fi
done
echo " The position is" $temp
我没有得到这个输出 只是位置是没有数字。 我做错了什么?
答案 0 :(得分:3)
这里有一些大问题。
任务中的空白。一个问题是这些行:
temp= $number1
temp= $index
需要像这样:
temp=$number1
temp=$index
这是因为在Bash中,这样的事情:
varname=value command
运行命令command
,环境变量varname
设置为value
。在你的情况下,这个:
temp= $number1
尝试运行命令$number1
,并将环境变量temp
设置为空字符串。
重复使用临时变量。另一个问题是这一行:
temp=$number1
每次通过循环都会运行;因此,即使先前已将temp
设置为适当的数组索引,上述内容也会丢弃该值并将其替换为用户输入的数字。实际上,您应该删除此行,并在需要时直接使用$number1
。
变量名称不匹配。另一个问题是这一行:
for i in `seq 1 $N`
使用i
作为循环变量,但是这些行:
if [ temp -eq ${array[$index]} ]
then
temp= $index
使用index
。不用说,这些都需要匹配。
未扩展的变量。这一行:
if [ temp -eq ${array[$i]} ]
肯定是这样的:
if [ $temp -eq ${array[$i]} ]
(扩展变量$temp
而不是使用字符串'temp'
);但鉴于上述情况,现在应该是:
if [ $number1 -eq ${array[$i]} ]
数组索引。数组索引从零开始;因此,如果 N 是数组中元素的数量,那么您需要从0迭代到 N -1。所以,这个:
for i in `seq 1 $N`
需要这样:
for i in `seq 0 $((N - 1))`
虽然我实际上认为你应该完全摆脱N
,然后使用${#array[@]}
(这是一个Bash符号意思" array
中的元素数量):
for i in `seq 0 $((${#array[@]} - 1))`