$# 是Shell内置特殊变量,表示命令行传入脚本的位置参数个数(不含脚本名$0);如 ./script.sh a b c 中 $# 为3,无参数时为0,引号或转义空格均不改变参数块计数。

用 $# 就能直接获取传递给脚本的参数总个数。
为什么是 $#?
这是一个内置的特殊变量,代表从命令行传入脚本的位置参数(即 , , ...)的**数量**。它不包含脚本名( 这是一个内置的特殊变量,代表从命令行传入脚本的位置参数(即 $1, $2, $3...)的**数量**。它不包含脚本名($0),只统计用户实际输入的参数个数。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 执行
./script.sh a b c→$#的值是 3 - 执行
./script.sh "hello world" -v --help→$#的值是 3(引号内的空格不拆分参数) - 执行
./script.sh(无参数)→$#的值是 0
常见用法示例
在脚本中通常配合条件判断使用:
- 检查是否至少需要两个参数:
if [ $# -lt 2 ]; then echo "请提供至少两个参数"; exit 1; fi - 检查是否恰好传入三个参数:
if [ $# -ne 3 ]; then echo "用法:$0 "; exit 1; fi - 打印当前参数总数:
echo "共收到 $# 个参数"
注意和易错点
$# 不受引号或空格影响,只看参数“块”的数量。
-
./script.sh "a b" c→ 两个参数:$# == 2("a b"算一个整体) -
./script.sh a\ b c→ 同样是两个参数(反斜杠转义空格,仍为一个参数) - 不要混淆
$*或$@:$#是数字,$*/$@是参数内容本身

















