Bash help 命令:查询内建命令与 Shell 语法帮助

help 是 Bash 的内建命令,用于查看当前 Bash 提供的内建命令和 Shell 语法帮助。查询 cd、read、alias 或 for 等功能时,最直接的方法是 help 名称;它不会搜索所有外部 Linux 程序的用法。

可以用 -s 只看语法,用 -d 看简短说明,或用 -m 输出类似手册页的结构。下面介绍这些选项、模式匹配、命令类型判断、输出保存与脚本中的返回状态。

help 命令是什么?

Bash 内建命令(builtin)由 Shell 自身执行,通常无需启动独立的可执行程序。cd 改变当前 Shell 的工作目录,read 把输入读入 Shell 变量,alias 管理别名,都是与 Shell 状态密切相关的功能。这里的“内建”不等于用户用函数语法定义的 Shell 函数。

help 还提供 if、for、while、[[ 等语法主题的说明。这些是语法结构或复合命令,不能因为能查询帮助,就把它们全部归类为普通内建命令。其他 Shell 是否提供同名命令、有哪些选项,应查对应 Shell 的文档。

基本语法与查询示例

以下是语法示意,方括号表示可选项,pattern 表示要查询的主题名称或匹配模式;实际使用时替换相应部分。

help [-dms] [pattern]

不带参数运行,列出当前 Bash 可提供帮助的内建命令和语法主题。它不是系统中所有命令的清单,也不应据此认定每个条目都能在当前环境中直接执行。

help

指定名称可阅读对应说明。下列命令只是显示帮助,不会执行 cd、读取用户输入或调用被说明的 printf。

help cd
help read
help printf

语法主题也可以直接查询。遇到带有 Shell 特殊含义的字符时,用引号避免它们在传入 help 前被解释。

help if
help for
help '[['

三种常用输出选项

选项 用途
-d 只显示匹配主题的简短说明。
-m 以类似 man 手册页的结构显示说明。
-s 只显示简短的调用语法(synopsis)。

编写脚本时,如果只想确认参数位置和选项组合,可以先查看调用语法:

help -s read
help -s getopts

例如 help -s getopts 会显示类似 getopts optstring name [arg ...] 的格式。它提示必须提供选项字符串和接收结果的变量名,但不能代替完整的选项解析说明。输出会随 Bash 版本和构建选项变化,不要把某一版本的整行格式当作永久固定的接口。

需要知道命令做什么时用 -d;需要按名称、语法和说明分段阅读时用 -m。

help -d cd
help -m cd

-m 只是改变 help 的输出组织方式,不会打开 man 阅读器,也不要求先安装独立的 cd 手册页。要看详细解释而非语法摘要,应使用普通 help 名称 或 help -m 名称。

用模式查找多个帮助主题

先精确匹配,再按前缀查找

没有模式字符时,Bash 先尝试精确匹配主题名称;找不到完全一致的名称后,再查找以该字符串开头的主题。例如:

help comp

在提供相应主题的 Bash 中,结果可包含 compgen、complete、compopt 等条目。若输入的名称已精确匹配某个主题,就不应期待它同时返回所有同前缀主题;需要这样查找时可明确使用通配模式。

使用带引号的通配模式

模式中有 * 等字符时,help 按 Shell 模式规则匹配主题名称,并显示匹配项。用引号防止模式先被当前目录中的文件名展开。

help 'read*'
help '*dir*'

read* 可匹配 read、readarray 等主题,*dir* 可匹配名称含 dir 的条目,具体集合取决于当前 Bash。这里是名称匹配,不是扫描所有帮助正文,也不是正则表达式全文检索;想按主题名称找相关功能时,先使用 help 自己的匹配机制即可。

先判断命令类型,再选择帮助来源

不确定一个名称实际代表什么时,先用 type 查看它在当前 Shell 中的解析结果。

type cd
type printf
type ls

常见结果中,cd 和 printf 会被报告为 shell builtin,而 ls 通常是某个路径下的外部文件。不过别名、函数、PATH 和环境配置都可能改变结果,应以本机输出为准。

同一个名称也可以同时有内建实现和外部程序。例如查看 printf 的多个候选:

type -a printf

help printf 解释的是 Bash 内建 printf,而不是 PATH 中外部程序的所有行为。type -a 显示当前 Shell 能找到的候选,并不扫描磁盘上的全部同名文件;需要外部实现的说明时,先确认其路径,再查看那个程序支持的帮助选项或手册。

help、--help、man 与 info 的区别

方式 适合查询的对象 特点
help 名称 Bash 内建命令和 Shell 语法主题。 由当前 Bash 提供帮助。
程序 --help 支持该选项的外部程序或部分内建命令。 直接显示程序自带的用法,是否支持由具体程序决定。
man 名称 命令、文件格式、系统调用等。 阅读本机安装的手册页。
info 名称 提供并安装了 Info 文档的软件。 通过节点、菜单和索引浏览长手册。

Bash 的 cd --help 可以显示 cd 的帮助,但不能据此推断所有 Shell、所有内建命令或所有外部程序都支持 --help。查询 Bash 内建功能时,直接用 help 更容易确认说明的归属。

需要按节号查询命令、配置或函数时,可使用 man 手册查询方法;需要沿 GNU 手册章节和索引深入阅读时,可使用 Info 文档阅读与导航方法。这些工具读取的文档不一定与当前 Bash 版本完全一致,应同时核对版本。

实际查询时如何使用?

查找 read 的选项

read 有读取来源、超时、分隔符、数组等选项。先看语法,再在完整说明中找需要的选项,而不是只凭选项字母猜含义。

help -s read
help read

例如需要限制等待时间时,在详细帮助中查 -t 的说明,并继续阅读超时返回状态与适用输入类型。这里显示的是帮助;如果另行编写实际读取输入的脚本,还应根据目标 Bash 版本验证具体行为。

查条件判断与循环语法

脚本中的保留字和复合命令也有对应主题。下面的查询不会运行条件判断或进入循环,只显示写法说明。

help if
help while
help for
help case

阅读时区分方括号、占位名称与实际需要输入的语法字符;不确定某个示例的上下文时,应先读完整帮助,而不是把语法摘要原样粘贴执行。

把输出交给分页器或保存为文件

正常帮助写到标准输出,可用 less 阅读,也可以重定向保存到当前目录。下面两行是两种独立用法:第一行进入分页器后用 q 退出,第二行写文件。

help -m read | less
help -m read > read-help.txt

写文件前确认当前目录可写;> 会覆盖已有的 read-help.txt,需要保留旧文件时换一个文件名。完成后用文本阅读器打开该文件,核对名称、语法和说明是否完整。

保存的文件反映的是生成时那个 Bash 的帮助内容,不能自动适配其他机器的版本。需要比较环境时可先查看各自的 bash --version,再对照对应版本的帮助;错误诊断通常走标准错误,不一定随普通输出一起保存。

在脚本中检查帮助主题是否存在

有效查询找到匹配主题时通常返回 0,没有匹配主题时返回非零值,也应考虑选项错误等失败原因。下例只检查当前 Shell 是否能找到 mapfile 的帮助:

if help mapfile >/dev/null 2>&1; then
 printf '%s\n' '可以查看 mapfile 的帮助。'
else
 printf '%s\n' '当前 Shell 中找不到 mapfile 的帮助。'
fi

找到主题时会输出“可以查看 mapfile 的帮助。”;找不到时进入 else 分支。>/dev/null 2>&1 抑制帮助与诊断,让脚本只打印判断结果。该示例应由 Bash 执行,例如把完整脚本保存为文件后使用 bash 文件名,不能假定任意 sh 都提供 help。

有帮助不等于功能当前可调用。 例如内建命令被 enable -n 禁用后,其帮助仍可能存在。help 还支持前缀匹配,因此返回成功也不总能证明输入名称是精确存在的命令。要检测实际功能,应结合 type -t 名称、command -v 名称 或安全的功能测试;type 和 command 的结果也可能指向函数、别名或外部程序,需要一起解释。不要靠解析可能翻译或变化的帮助文案判定支持情况。

常见问题

出现 help: no help topics match,怎么办?

输入的名称可能不属于 Bash 帮助主题,或当前版本、构建未提供相应主题。先用 type 名称 确认解析结果,再选择该功能实际支持的帮助来源;外部程序不应直接用 Bash help 查询。

为什么在 sh 脚本里无法使用 help?

help 是 Bash 的功能,其他实现的 /bin/sh 可能没有它。需要 Bash 的脚本应明确由 Bash 执行;Bash 进入 POSIX 模式并不意味着 help 自动消失,但 POSIX 没有保证其他 Shell 提供这个命令。

help 与 man 对同名命令的解释为什么不同?

常见原因是一个解释 Bash 内建实现,另一个解释外部程序,或两份文档版本不同。先用 type -a 名称 确认候选,再核对实际调用的实现和手册对象。

help 需要单独安装软件包吗?

常见的 Bash 安装已经包含 help,通常无需另装同名软件包。如果它不存在,先确认当前 Shell、Bash 构建以及内建命令是否被禁用,而不是直接安装名字相近的外部工具。

help 能查所有 Linux 命令吗?

不能。主要范围是当前 Bash 提供的内建命令与语法主题。外部程序应使用它支持的 --help、man、Info 或项目文档。

如何只看一行语法或简短说明?

用 help -s 名称 看调用语法,用 help -d 名称 看简短描述;完整格式较长时语法仍可能换行。需要类似手册页的段落结构时用 -m。

按查询目标选择工具

Bash 内建命令和语法主题可以先用 help 名称,只需参数格式时用 -s,名称记不完整时再用前缀或带引号的模式。不确定名称的性质时,先检查 type 的结果,再决定读取当前 Bash 帮助还是外部程序文档。其他日常任务可结合Linux 常用命令分类参考查找对应工具。

参考资料