【问题标题】:How do I find the number of arguments passed to a Bash script?如何找到传递给 Bash 脚本的参数数量?
【发布时间】:2011-05-24 07:47:48
【问题描述】:

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

这是我目前拥有的:

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done

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

【问题讨论】:

标签: bash arguments


【解决方案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。它总是代表$@的长度,这很方便。
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 2013-06-18
    • 2012-01-23
    • 2011-04-26
    • 2021-11-18
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多