bash `shift` 命令是否更改参数计数 `$#`

bash `shift` 命令是否更改参数计数 `$#`

当我使用 bashshift命令时,这会改变 中的参数计数吗$#

作者注:当我有这个问题时,我在这个社区上还没有找到它。因此我只是尝试了一下并得到了答案。因为我认为这可能对其他人有帮助,所以我将我在这里学到的内容发布为 一个自我回答的问题

答案1

是的,确实如此,标准中明确要求:

shift [n]位置参数应移动。位置参数 1 应指定为参数 (1+n) 的值,[...]并且参数“#”被更新以反映新的位置参数数量。

考虑这个脚本:

#!/usr/bin/env bash
echo "$#"
shift
echo "$#"

调用它就像script-file first second third将打印3后跟2.

这意味着我们可以做如下事情:

#!/usr/bin/env bash
while [[ "$#" > 0 ]] ; do
    echo "$1"
    shift
done

...它将在自己的行上一一打印参数。

相关内容