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 |
还有其他更好的方法吗?
- 如果存在任何参数,该代码只会将文本字符串i+1存储在变量i中。
- @建设者:只需看看运营商的记录,即在近5.5年内有2个职位,并且只有被动的业力积累(这个问题上占95%)。我真的不认为他是一个活跃的用户,也不认为他给任何帮助过的人一个公认的答案。不过,他的问题是完全合法的,这也帮助了其他在做man bash方面同样缺乏实践的人。所以,活下去,让它活下去;—)
- @我以为我会再试一次。OP可能仍在阅读并看到通知。我有"不折不扣的英雄"徽章,而且通常不会提醒行动组接受我的回答。不过,如果他们中的一个最终接受了我的回答,我还是会感到骄傲的。
- @我没有,但我仍然认为行动组应该接受一个正确的答案。作为一种感谢的表示,并向其他人表明他们的问题可能在这里得到解决。
- 相关:stackoverflow.com/questions/18568706/…
参数个数为$#。
在此页面上搜索以了解更多信息:http://tldp.org/ldp/abs/html/internalvariables.html arglist
- 澄清:与C语言中的argc不同,如果脚本中没有传递参数,$#将是0,如果有一个参数,1将是0,等等。
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" |
- +一个有效的例子!美好的
- 它也帮助了我,我想做的是;!/bin/bash count=0 sum=0 avg=0 for var in"$@"do((sum+=$var))((count++))done((avg=sum/$count))echo"数字的总和是:$sum"echo"数字的平均值是:$avg",这有助于我获得未知的args数并进行一些数学运算(您可以编辑操作数),谢谢丹尼斯·威廉姆森,我做到了。我在发代码,因为它可能对某人有用。
- 卡尼?lmaz:唯一的问题是bash只做整数运算。如果你想要小数,你需要使用awk,bc或者其他一些东西(ksh93和zsh也可以做十进制数学)。您的代码包含一些变量的美元符号,但不包括其他变量。不管你是否使用它们,你都应该保持一致。在(())内部,它们是不必要的。然而,它们在echo声明中。
- 我不太擅长Linux,我只是根据需要修改了您的代码。基本上是你的代码
要添加原始引用:
您可以从特殊参数$#中获得参数数量。值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 |
- 可以写成echo"$@" | awk '{print NF}'。
该值包含在变量$#中。
- 除了4岁的回答几乎完全相同(但正确)之外,你的回答是错误的——应该是$#。