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

sab*_*bri 168 bash arguments

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

这就是我目前所拥有的:

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done
Run Code Online (Sandbox Code Playgroud)

还有其他(更好)的方法吗?

zsa*_*ank 266

参数的数量是 $#

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

  • 澄清:与C语言中的`argc`不同,如果没有传递给脚本的参数,`$ #`将为'0`,如果有一个参数,则为'1`等. (29认同)
  • 如果你将参数从它的数组中“移开”,“$#”也会被减1。它总是代表“$@”的长度,这非常方便。 (3认同)

Pau*_*ce. 96

#!/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"
Run Code Online (Sandbox Code Playgroud)


Mic*_*rux 9

添加原始参考:

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

当与shift参数处理一起使用时,$#每次shift执行Bash Builtin时特殊参数都会递减.

请参阅3.4.2特殊参数一节中的Bash参考手册:

  • "shell专门处理几个参数.这些参数可能只被引用 "

  • 在此部分中,关键字$# "扩展为十进制中的位置参数数."