+ -
当前位置:首页 → 问答吧 → 小白学习bash,遇到问题了,求帮忙

小白学习bash,遇到问题了,求帮忙

时间:2011-07-04

来源:互联网

代码是在公司写的,带不回来,我重写一下
是一个简单的循环队列
#!/bin/bash
MAX_N=20
DIR_QUEUE[$MAX_N]
FRONT=0
TAIL=0

push_back()
{
      for ARG in "$@"
      do
           DIR_QUEUE[$TAIL]=$ARGle
           let "TAIL=($TAIL+$MAX_N+1)%$MAX_N
      done
}

pop_front()
{
       index=-1
       if [[ $FRONT -ne $TAIL ]]
       then
           let "index=$FRONT"
           let "FRONT=($FRONT+$MAX_N+1)%$MAX_N
       fi
       return $index
}

push_back AAA   
push_back BBB

问题就出现在下面
---------------------------------------------------------------------------
pop_front
if [[ $? -ne -1 ]]
then
     echo ${DIR_QUEUE[$?]}
fi

pop_front
echo ${DIR_QUEUE[$?]            
这样会输出
AAA
BBB
----------------------------------------------------------------------------
pop_front
if [[ $? -ne -1 ]]
then
     echo ${DIR_QUEUE[$?]}
fi

pop_front
if [[ $? -ne -1 ]]
then
     echo ${DIR_QUEUE[$?]            
fi
这样就输出(只是多加了一个判断么)
AAA
AAA
----------------------------------------------------------------------------
把pop_front里面改成标准输出 ,对面用 echo $(pop_front)
                                                          echo $(pop_front)
                                  输出也全是AAA



搞了几个小时也不明白怎么回事,迷茫中,望指教

作者: 丿相当低调   发布时间: 2011-07-04

$? -ne -1

$?的值为0-255

作者: waker   发布时间: 2011-07-05

本帖最后由 li2002 于 2011-07-05 09:24 编辑
  1. pop_front
  2. if [[ $? -ne 255 ]]
  3. then
  4.      echo ${DIR_QUEUE[$?]            
  5. fi
复制代码
你应该知道$?的意思吧,是上一条命令的处理结果,所以上面的两个$?就不是同一个意思了,${DIR_QUEUE[$?]中的$?是if命令的处理结果,就是0,不是你想要的pop_front的结果index

作者: li2002   发布时间: 2011-07-05