我一直在使用Z shell一段时间,我开始变得好奇.在编写自己的函数时,我偶然发现的一件事是"自动加载".
根据zshbuiltins(1),手册页autoload是"等价于functions -u"(有例外),它"等同于typeset -f"(有例外).但是,在查看了autlooad的使用后functions/Prompts/promptinit,我想我知道它的作用.
我认为autoload是一种"导入"声明.
但为什么"autoload foo"优于"源栏"呢?我不明白.
Mar*_*gen 27
如zsh文档中所述:
可以使用自动加载内置(或
functions -u或typeset -fu)将函数标记为未定义 .这样的功能没有身体.首次执行该函数时,shell使用fpath变量的元素搜索其定义.[...]
autoload 允许在没有主体的情况下指定函数,然后在使用时自动加载;)
source然而,把参数作为一个脚本,然后executed在当前会话的环境-即您将保留所有更改脚本执行的环境,这是不是这种情况时,只需执行脚本.
我认为在功能中使用大量实用程序时,此功能非常有用.它允许更快的启动(不需要加载自动加载功能的所有代码)并且可以保持壳的内存占用更小.