在Bash中,"$#"表示命令行参数的数量是多少?

7

我有一个包含以下内容的脚本:

login {
    # checking parameters -> if not ok print error and exit script
    if [ $# -lt 2 ] || [ $1 == '' ] || [ $2 == '' ]; then
        echo "Please check the needed options (username and password)"
        echo ""
        echo "For further Information see Section 13"
        echo ""
        echo "Press any key to exit"
        read
        exit
    fi

  } # /login

但是我真的不知道第三行中的$#是什么意思。


4
脚本接收的参数数量。 - devnull
1
这个问题已经被问答过很多次了。 - devnull
请参见https://dev59.com/u3nZa4cB1Zd3GeqPtK0g。 - Keith Thompson
同时,http://stackoverflow.com/questions/11323847/what-do-and-stand-for-in-shell-script/。 - devnull
@kojiro 无论如何都无法搜索符号和特殊字符。(而将问题标记为重复并不会限制任何人发布答案。) - devnull
显示剩余3条评论
2个回答

10

井号用于计数。

  1. 如果只有$#,它表示位置参数的数量,例如$1$2$3。(不包括$0
  2. 如果是${#var},它表示参数扩展后的字符数。(字符串长度)
  3. 如果是${#var[@]},它表示数组中元素的数量。由于Bash数组是稀疏的,因此这可能与最后一个元素的索引加一不同。

2
这是传递的参数数量。
你可以在这里阅读,搜索“检测命令行参数”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接