$# 是 shell 中直接获取脚本参数个数的内置变量,为整数,支持数值比较,不包含脚本名,准确统计 $1 到 $n 的数量,是最直接高效的参数计数方式。

用 $# 就能直接获取脚本执行时传入的参数个数,这是 Shell 内置的特殊变量,最常用也最可靠。
直接使用 $# 判断参数数量
在脚本开头或需要校验的位置,用 if 检查 $# 的值即可。比如要求必须传入 2 个参数:
if [ $# -ne 2 ]; then echo "错误:需要恰好 2 个参数"; exit 1; fi-
$#是整数,支持-eq、-ne、-lt等数值比较,不要用=(那是字符串比较)
注意 $# 不包含脚本名本身
$# 统计的是命令行中 实际传给脚本的参数个数,不包括脚本路径或名称。例如执行 ./test.sh a b c,$# 的值是 3,不是 4。
-
$0是脚本名,$1、$2… 才是参数,$#对应的就是$1到$N的个数 - 即使参数含空格或特殊字符(只要正确引用),
$#仍准确计数
配合 shift 或遍历做动态校验
如果参数数量不固定但有最小/最大限制,也可以结合 $# 做范围检查:
- 至少 1 个参数:
if [ $# -lt 1 ]; then ... - 最多 5 个:
if [ $# -gt 5 ]; then ... - 校验后可用
shift逐个处理,每shift一次,$#自动减 1
别和 $@ 或 $* 的长度混淆
$@ 和 $* 是参数列表本身,它们的“长度”需通过 set -- "$@" 后再用 $# 获取——但没必要绕路。$# 本身就是最直接、最高效的参数计数方式,无需额外展开或统计。
不复杂但容易忽略,记住 $# 就是答案。











