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


Answers:



99
#!/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"

它也帮助了我,我一直试图做的是;#!/ bin / bash count = 0 sum = 0 avg = 0 for var in“ $ @” do((sum + = $ var))((count ++))完成((avg = sum / $ count))echo“数字的总和是:$ sum“ echo”数字的平均数是:$ avg“,它可以帮助我获得未知的args数量并进行一些数学运算(您可以编辑操作数)感谢Dennis Williamson,我做到了。我正在发布代码,因为它可能对某人有用。
kaanyılmaz16年

1
@kaanyılmaz:唯一的问题是Bash仅执行整数运算。如果要使用小数,则需要使用AWK bc或其他方式(ksh93和zsh也可以进行小数运算)。您的代码包含一些变量的美元符号,但不包含其他变量。是否使用它们应该保持一致。内部(())没有必要。但是,它们在echo语句中。
暂停,直到另行通知。

我对linux不太满意,我只是根据需要修改了您的代码。基本上是您的代码
kaanyılmaz16年

感谢您的代码,它非常好。
Smeterlink

12

添加原始参考:

您可以从特殊参数获取参数数量$#。值为0表示“无自变量”。$#是只读的。

当与shift参数处理结合使用时,$#每次shift执行Bash Builtin时,都会减小特殊参数。

请参阅《Bash参考手册》中的3.4.2特殊参数

  • “ shell专门对待几个参数。这些参数只能被引用

  • 在本节中,关键字$# “扩展为十进制的位置参数数。”


-1

以下是简单的-

猫计数变量

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

输出:

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

3
可以写成echo "$@" | awk '{print NF}'
user000001

-6

该值包含在变量中 $#


4
除了几乎完全相同(但正确)的答案已经使用4年这一事实,您的答案是错误的-应该是$#
nachteil
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.