我在网上找到了一个bash脚本教程循环中的以下内容:
while(($#)) ; do
#...
shift
done
我不明白在while循环中使用位置参数基数。我知道shift
命令的作用,但是while语句是否与shift
一起使用有特殊用途?
答案 0 :(得分:4)
每次执行shift
时,位置参数的数量减少一个:
$ set -- 1 2 3
$ echo $#
3
$ shift
$ echo $#
2
所以执行此循环直到每个位置参数都被处理完毕;如果至少有一个位置参数,则(($#))
为真。
执行此操作的用例是(复杂)选项解析,您可以在其中使用参数选项(想想command -f filename
):将使用额外的shift
处理和删除该选项的参数
有关复杂选项解析的示例,请参阅BashFAQ/035和ComplexOptionParsing。第二个链接的最后一个示例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
的用法)。