当我使用 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
...它将在自己的行上一一打印参数。