5261

26 分钟

#Bash 的 complete 命令

complete [OPTION]... [NAME]...

功能

指定按 TABReadline 如何补全参数。

类型

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 - 为补全的结果添加后缀
    • -p - 打印补全规则
    • -r - 删除补全规则
    • -D - 设置默认的补全方式;通常是文件
    • -E - 设置命令行为空时的补全方式;通常是命令
    • -I - 设置开始词的补全方式;通常是命令
  • NAME - 要配置的命令列表

#示例

用命令补全参数

$ mycmd                                     # 按 TAB 补全,默认补全为当前路径下的文件
1.txt   2.txt   3.txt   dir1    dir2
$ complete -c mycmd                         # 指定用 命令 补全 mycmd 的参数
$ mycmd                                     # 按 TAB 补全,补全为命令
Display all 3318 possibilities? (y or n)
addpart     b2sum       cat         date    echo
agetty      base32      chcon       dd      env
alias       base64      chgrp       df      expand
...

用目录补全参数

$ mycmd                                     # 按 TAB 补全,默认补全为当前路径下的文件
1.txt   2.txt   3.txt   dir1    dir2
$ complete -d mycmd                         # 指定用 目录 补全 mycmd 的参数
$ mycmd                                     # 按 TAB 补全,补全为命令
dir1    dir2

指定参数补全列表

$ mycmd                                     # 按 TAB 补全,默认补全为当前路径下的文件
1.txt   2.txt   3.txt   dir1    dir2
$ complete -W "start stop restart" mycmd    # 指定补全列表为 start stop restart
$ mycmd                                     # 按 TAB 补全
restart  start    stop
$ mycmd st                                  # 按 TAB 补全
start    stop

通过通配符补全

$ mycmd                                     # 按 TAB 补全,默认补全为当前路径下的文件
1.txt   2.txt   3.txt   1.md    2.md
$ complete -G '*.md' mycmd                  # 指定用 *.md 补全 mycmd 的参数
$ mycmd                                     # 按 TAB 补全
1.md    2.md

指定前后缀

$ mycmd                                         # 按 TAB 补全,默认补全为当前路径下的文件
1.txt   2.txt   3.txt   1.md    2.md
$ complete -G '*.md' -P '-i ' -S ' -o' mycmd    # 指定用 -i *.md -o 补全 mycmd 的参数
$ mycmd                                         # 按 TAB 补全
-i 1.md -o           -i 2.md -o

#相关命令

命令说明
compgen生成补全列表
compopt动态修改补全选项

#手册

更新: 2026/4/22

作者: PlanC

创建: 2026/4/22