如果您查看文件,/usr/share/bash-completion/completions/*
许多文件后面都有函数定义&& complete -F
(至少在 Xenial 中)。为什么是这样?
该符号在 bash 完成文件中是否具有特殊含义?
在 bash 中,我看不到脚本之间的任何功能差异
a(){ echo in;return 1;} && a
和
a(){ echo in;return 1;}; a
如果您查看文件,/usr/share/bash-completion/completions/*
许多文件后面都有函数定义&& complete -F
(至少在 Xenial 中)。为什么是这样?
该符号在 bash 完成文件中是否具有特殊含义?
在 bash 中,我看不到脚本之间的任何功能差异
a(){ echo in;return 1;} && a
和
a(){ echo in;return 1;}; a
Bash 参考手册告诉
语法错误可能会在命令之前终止脚本执行
complete -F
,因此函数声明之后的命令可能无论如何都不会执行,但如果在获取包含该函数的文件之前声明了同名的只读函数,它可能不会终止执行。为了防止调用错误的 bash 完成函数,使用了这样的逻辑 AND 测试。complete
是一个bash内置函数,它告诉bash如何在各种情况下自动完成。特别是,complete -F
funcname cmdname告诉bash,如果用户输入了命令cmdname,那么参数的完成将由函数funcname处理。使用help complete
和man bash
获取更多信息。许多系统安装的自动完成文件使用模式安装自动完成功能例如,
它告诉bash如果用户有 type
apt-get
作为命令名,那么自动完成将由 function 处理_apt_get
。这纯粹是编码风格的问题,而且这种风格并不难看,也不难理解。