如何查找传递给Bash脚本的参数数量?

How do I find the number of arguments passed to a Bash script?

如何找到传递给bash脚本的参数数量?

这是我目前拥有的:

1
2
3
4
5
6
#!/bin/bash
i=0
for var in"$@"
do
  i=i+1
done

还有其他更好的方法吗?


参数个数为$#

在此页面上搜索以了解更多信息:http://tldp.org/ldp/abs/html/internalvariables.html arglist


1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
echo"The number of arguments is: $#"
a=${@}
echo"The total length of all arguments is: ${#a}:"
count=0
for var in"$@"
do
    echo"The length of argument '$var' is: ${#var}"
    (( count++ ))
    (( accum += ${#var} ))
done
echo"The counted number of arguments is: $count"
echo"The accumulated length of all arguments is: $accum"


要添加原始引用:

您可以从特殊参数$#中获得参数数量。值0表示"无参数"。$#是只读的。

当与shift一起用于参数处理时,每次执行bash builtin shift时,专用参数$#都会递减。

参见第3.4.2节特殊参数中的bash参考手册:

  • "外壳专门处理几个参数。这些参数只能被引用。"

  • 在本节中,关键字$"扩展到十进制位置参数的数目。"


下面是简单的-

cat countvariable.sh目录

1
echo"$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'

输出:

1
2
3
4
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8


该值包含在变量$#中。