如何找到传递给 Bash 脚本的参数数量?
Posted
技术标签:
【中文标题】如何找到传递给 Bash 脚本的参数数量?【英文标题】:How do I find the number of arguments passed to a Bash script? 【发布时间】:2011-05-24 07:47:48 【问题描述】:这是我目前拥有的:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
还有其他(更好的)方法吗?
【问题讨论】:
如果存在任何参数,该代码将简单地将文字字符串i+1
存储在变量 i
中。
相关:***.com/questions/18568706/…
【参考方案1】:
下面是简单的-
cat countvariable.sh
echo "$@" | awk 'print NF'
输出:
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8
【讨论】:
可以写成echo "$@" | awk 'print NF'
【参考方案2】:
添加原始引用:
您可以从特殊参数$#
中获取参数的数量。值 0 表示“无参数”。 $#
是只读的。
当与 shift
一起用于参数处理时,每次执行 Bash Builtin shift
时都会递减特殊参数 $#
。
参见3.4.2 Special Parameters部分中的Bash Reference Manual:
"shell对几个参数有特殊处理。这些参数只能被引用"
并在本节中为关键字$#“扩展为十进制位置参数的数量。”
【讨论】:
【参考方案3】:该值包含在变量$#
中
【讨论】:
除了几乎完全相同(但正确)的答案是 4 岁之外,您的答案是错误的 - 它应该是$#
【参考方案4】:
#!/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 "average of the numbers is: $avg" 这可以帮助我获取未知的 args 数字并进行一些数学运算(您可以编辑操作数) 感谢 Dennis Williamson,我做到了。我发布代码是因为它可能对某人有用。 @kaanyılmaz:唯一的问题是 Bash 只做整数运算。如果您想要小数,则需要使用 AWK、bc
或其他东西(ksh93 和 zsh 也可以进行十进制数学运算)。您的代码包含一些变量的美元符号,但不包含其他变量。您应该对是否使用它们保持一致。在(())
内部,它们不是必需的。但是,它们位于 echo
语句中。
我对linux不是很好,我只是根据需要修改了你的代码。基本上是你的代码【参考方案5】:
参数个数是$#
在此页面上搜索以了解更多信息: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
【讨论】:
澄清:与 C 语言中的argc
不同,如果没有传递给脚本的参数,$#
将是 0
,如果有一个参数,则 1
等等。
如果你shift
参数远离它的数组,$#
也会被减1。它总是代表$@
的长度,这很方便。以上是关于如何找到传递给 Bash 脚本的参数数量?的主要内容,如果未能解决你的问题,请参考以下文章
在 bash 脚本中,我有一组参数要传递给另一个 bash 脚本。我该怎么做? [复制]