在zsh中将变量用作命令参数

时间:2019-01-05 10:35:41

标签: variables zsh variable-expansion fzf

我正在尝试为zsh编写一个函数,以使用fzf查找文件并直接在编辑器中将其打开。 调用fzf的参数存储在变量中,如下所示:

FZF_FILE_PREVIEW="--preview 'cat {}) 2> /dev/null | head -200'"

函数如下:

fzf_find_edit() {
    local file=$(fzf ${FZF_FILE_PREVIEW})
    if [[ -n $file ]]; then
        $EDITOR $file
    fi
}

但是似乎FZF_FILE_PREVIEW不能正确展开,因为在运行该函数时,我得到:

unknown option: --preview 'cat {}) 2> /dev/null | head -200'

如果我直接跑步

fzf --preview 'cat {}) 2> /dev/null | head -200'

它按预期工作。

如何使变量正确扩展?

1 个答案:

答案 0 :(得分:0)

借助zsh IRC频道,我想出了解决的办法:

使用()为变量分配一个数组:

FZF_FILE_PREVIEW=(--preview 'cat {}) 2> /dev/null | head -200')

,然后可以引用为:

file=($(fzf ${FZF_FILE_PREVIEW}))

仅当导出数组时,它才会变得棘手:

export FZF_CTRL_T_OPTS=${(j< >)${(@q-)FZF_FILE_PREVIEW}}

加入数组的元素,进一步的说明在docs中。