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