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

Pau*_*wen 3 bash arguments

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

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

Pau*_*wen 10

是的,标准中明确要求

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

考虑这个脚本:

#!/usr/bin/env bash
echo "$#"
shift
echo "$#"
Run Code Online (Sandbox Code Playgroud)

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

这意味着我们可以执行以下操作:

#!/usr/bin/env bash
while [[ "$#" > 0 ]] ; do
    echo "$1"
    shift
done
Run Code Online (Sandbox Code Playgroud)

...这将在他们自己的行上一个一个地打印参数。