![bash `shift` 命令是否更改参数计数 `$#`](https://linux22.com/image/12179/bash%20%60shift%60%20%E5%91%BD%E4%BB%A4%E6%98%AF%E5%90%A6%E6%9B%B4%E6%94%B9%E5%8F%82%E6%95%B0%E8%AE%A1%E6%95%B0%20%60%24%23%60.png)
当我使用 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
...它将在自己的行上一一打印参数。