我当时正在使用外壳程序,但tab写完后错误地自动完成了工作_e
,结果是_expand
。
该命令的作用是什么?我在网上找不到解释,我在Ask Ubuntu上只能找到以下参考:
但是他们没有回答我的问题。相反,他们开辟的同类更有人对类似这样的命令_complete
,_complete_as_root
等等。
我当时正在使用外壳程序,但tab写完后错误地自动完成了工作_e
,结果是_expand
。
该命令的作用是什么?我在网上找不到解释,我在Ask Ubuntu上只能找到以下参考:
但是他们没有回答我的问题。相反,他们开辟的同类更有人对类似这样的命令_complete
,_complete_as_root
等等。
Answers:
您可以_expand
在输入时查明是什么
$ type _expand
_expand is a function
_expand ()
{
if [[ "$cur" == \~*/* ]]; then
eval cur=$cur;
else
if [[ "$cur" == \~* ]]; then
cur=${cur#\~};
COMPREPLY=($( compgen -P '~' -u "$cur" ));
[ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
return ${#COMPREPLY[@]};
fi;
fi
}
这是bash完成机制中的功能。它~
在路径名中扩展了波浪号()。在其中/etc/bash_completion
是对该函数的注释:
# Expand ~username type directory specifications. We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.
在终端中尝试,键入:
~<tab><tab>
它将扩展为用户名,例如
~usera ~userb ~userc
_expand
与所有其他完整函数一样,该函数正是COMPREPLY
根据$cur
包含完成模式的值来操纵数组。
type
。我不清楚为什么我不能将这些函数称为_function_name [argument]
,但是现在我知道它们充当自动完成扩展的目的,而它们出现在我的自动完成中的事实仅仅是因为它们是声明的(但它们并不意味着直接调用)。