以下代码没有输出

时间:2012-03-18 12:15:03

标签: bash if-statement

代码是:

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

我没有得到这个输出 只是位置是没有数字。 我做错了什么?

1 个答案:

答案 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))`