嗨,我正在尝试让zsh运行一个git命令,并使用输出生成自动补全选项。
我正在尝试运行的命令是:
我正在尝试运行的命令是:
git log -n 2 --pretty=format:"'%h %an'"
以下是我使用的代码:
local lines words
lines=(${(f)$(git log -n 2 --pretty=format:"'%h %an'")})
words=${(f)$(_call_program foobar git log -n 2 --pretty=format:"%h")}
echo "Length of lines is " ${#lines[@]} " value is " ${lines}
echo "Length of words is " ${#words[@]} " value is " ${words}
compadd -d lines -a -- words
这根本不起作用...它认为words
是一个单独的元素,行根本没有正确地打印出来。
然而,当我手动设置一个字符串数组时,所有东西都能正常工作。
local lines words
lines=('one two' 'three')
words=('one two' 'three')
echo "Length of lines is " ${#lines[@]} " value is " ${lines}
echo "Length of words is " ${#words[@]} " value is " ${words}
compadd -d lines -a -- words
compadd
中,那真的是一个字面上的words
而不是"$words[@]"
吗? - geekosaur-a
选项让compadd
查找指定的数组。而"$words[@]"
是bash代码,尽管它可能在zsh中工作,因为zsh开发人员关注与bash的兼容性,但明智的zsh开发人员会只写$words
而不是那个(它通常可以正常工作,无论数组值中有什么符号)。 - ZyX