如何获取参数条件?

时间:2016-03-19 22:27:10

标签: linux bash

我有一个简单的代码:

compare()
{
        n=$#
        echo "Refference number: "
        read x

        while [ $n -gt 0 ]
                do
                if [ $1 -gt $x ]
                        then
                        echo "A greater number was found: " $1
                fi
                shift
        done
}

以这种方式,脚本不能正常工作。我在while行上得到一个带有错误的无限循环。

如果我在使用while [ $# -gt 0 ]行时替换它,一切正常。

为什么会这样?不是$ n = $#? 我使用的是CentOS 7。

2 个答案:

答案 0 :(得分:3)

您可以直接在while循环中使用$#。每次拨打shift时,它都会自然发生变化。

while [ $# -gt 0 ]; do
    ...
    shift
done

否则,您每次迭代都必须自己更新$n

while [ "$n" -gt 0 ]; do
    ...
    shift
    ((--n))
done

在此时分配n=$#使$n等于$#。它并不意味着$#更改时会自动更新。

答案 1 :(得分:1)

$n包含$#分配时的值副本。此后没有任何更改$n,因此循环根本不运行或连续运行。

在循环条件中使用$#时,shift会将参数数量减少一个,因此$#减少,循环终止。