2836

14 分钟

#Bash 的 compgen 命令

compgen [OPTION]... [WORD]

功能

根据选项显示可能的补全结果。

类型

Bash 内置命令。

参数

  • OPTION - 选项
    • -a - 补全为别名
    • -b - 补全为内置命令
    • -c - 补全为命令
    • -d - 补全为目录
    • -e - 补全为环境变量名
    • -f - 补全为文件
    • -g - 补全为组名
    • -j - 补全为作业名
    • -k - 补全为关键字
    • -s - 补全为服务名;参考 /etc/services
    • -u - 补全为用户名;参考 /etc/passwd
    • -v - 补全为变量名
    • -o option - 开启选项
      • nospace - 补全后不自动添加空格
      • filenames - 告知 Bash 结果是文件名;补全过程中会在目录后加上 /
      • bashdefault - 如果没找到匹配项,则回退到 Bash 默认补全
      • default - 如果没找到匹配项,则回退到默认行为
      • dirnames - 如果没有匹配项,则尝试进行目录名补全
    • +o option - 关闭选项
    • -A action - 补全方式
      • alias - 补全为别名;同 -a 选项
      • builtin - 补全为内置命令;同 -b 选项
      • command - 补全为命令;同 -c 选项
      • directory - 补全为目录;同 -d 选项
      • export - 补全为环境变量名;同 -e 选项
      • file - 补全为文件;同 -f 选项
      • group - 补全为组名;同 -g 选项
      • job - 补全为作业吗;同 -j 选项
      • keyword - 补全为关键字;同 -k 选项
      • service - 补全为服务;同 -s 选项
    • -G globpat - 补全通配符字符串 globpat
    • -W wordlist - 以 wordlist 作为补全列表
    • -F function - 通过函数 function 生成补全列表
    • -C command - 通过命令 command 生成补全列表
    • -X filterpat - 根据 filterpat 从补全列表中滤除部分选项
    • -P prefix - 为补全的结果添加前缀
    • -S suffix - 为补全的结果添加后缀
  • WORD - 要补全的单词

#示例

命令补全

$ compgen -c ls
ls
lsmod
lsipc
lspci
lsmod
...

通配符

$ compgen -G '*.txt'
3.txt
2.txt
1.txt

指定补全列表

$ compgen -W "xxx1 xxx2 xxx3 yyy1 yyy2 yyy3" xx
xxx1
xxx2
xxx3

添加前后缀

$ compgen -G '*.txt' -P 'cat ' -S ' >>file.txt'
cat 3.txt >>file.txt
cat 2.txt >>file.txt
cat 1.txt >>file.txt

#相关命令

命令说明
complete设置 TAB 的补全规则
compopt动态修改补全选项

#手册

更新: 2026/4/22

作者: PlanC

创建: 2026/4/22