while(($#));做......;转移;在bash中完成意味着,为什么有人会使用它?

时间:2017-03-08 17:02:25

标签: bash parameters while-loop

我在网上找到了一个bash脚本教程循环中的以下内容:

while(($#)) ; do
   #...
   shift
done

我不明白在while循环中使用位置参数基数。我知道shift命令的作用,但是while语句是否与shift一起使用有特殊用途?

2 个答案:

答案 0 :(得分:4)

每次执行shift时,位置参数的数量减少一个:

$ set -- 1 2 3
$ echo $#
3
$ shift
$ echo $#
2

所以执行此循环直到每个位置参数都被处理完毕;如果至少有一个位置参数,则(($#))为真。

执行此操作的用例是(复杂)选项解析,您可以在其中使用参数选项(想想command -f filename):将使用额外的shift处理和删除该选项的参数

有关复杂选项解析的示例,请参阅BashFAQ/035ComplexOptionParsing。第二个链接的最后一个示例Rearranging arguments使用精确的while (($#))技术。

答案 1 :(得分:1)

我们有一个脚本shi.sh

while(($#)) ; do
    echo "The 1st arg is: ==$1=="
    shift
done

用:

运行它
bash shi.sh 1 2 3  #or chmod 755 shi.sh ; ./shi.sh 1 2 3

你会得到

The 1st arg is: ==1==
The 1st arg is: ==2==
The 1st arg is: ==3==

请注意:第一(以及$1的用法)。