如何找到传递给 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 脚本的参数数量?的主要内容,如果未能解决你的问题,请参考以下文章

获取传递给 shell 脚本的最后一个参数

如何将数组参数传递给 Bash 脚本

在 bash 脚本中,我有一组参数要传递给另一个 bash 脚本。我该怎么做? [复制]

BASH - 如果没有命令行参数作为参数传递,则抛出使用警告

sh 查找传递给它的最后一个bash脚本参数

将可变数量的 bash 命令行参数传递给 MATLAB 函数