在 Linux Shell 脚本中,获取传递给脚本或函数的参数个数使用特殊变量 $#;它仅统计位置参数数量,不包含脚本名,且随 shift 操作实时更新。

在 Linux Shell 脚本中,获取传递给脚本的参数总个数,用特殊变量 $# 即可。
直接使用 $# 获取参数个数
$# 是 Shell 内置的特殊变量,表示当前脚本或函数接收到的位置参数(即命令行传入的参数)的个数。它不包含脚本名本身,只统计 $1、$2 … 这类实际参数的数量。
- 运行
./script.sh a b c→ $# 的值是 3 - 运行
./script.sh "hello world" -v→ $# 的值是 2(引号内空格不拆分) - 运行
./script.sh(无参数)→ $# 的值是 0
常见用法示例
通常配合条件判断做参数校验:
if [ $# -eq 0 ]; then echo "请至少提供一个参数"; exit 1; fiif [ $# -lt 2 ]; then echo "需要两个参数"; exit 1; fiecho "共收到 $# 个参数"
注意和 $*、$@ 的区别
$# 只管数量,不涉及内容。它和 $*、$@ 无关,也不会被它们影响。即使你用 shift 移除了部分参数,$# 会实时更新为剩余参数个数。
- 执行
shift后,原来的 $2 变成 $1,$# 自动减 1 - 可在循环中结合 $# 和 shift 逐个处理参数
在函数里也能用 $#
函数内部的 $# 表示传给该函数的参数个数,不是整个脚本的参数总数。
myfunc() { echo "函数收到 $# 个参数"; }-
myfunc apple banana cherry→ 输出 3


















