首页 > 解决方案 > 为 fzf 在“fd”结果前加上“~/”。Sed 抱怨“找不到匹配项”

问题描述

我正在尝试在 zsh 中为 fzf 创建一个函数。

我想在 fzf 中列出我的主文件夹下的所有目录和文件,在它们前面加上“~/”,然后最终将我的选择保存在一个变量中。

到目前为止,我有这个:

myVar=$(fd -t d -t f . ~ | xargs realpath --relative-to=$HOME | sed s/^/~\// | fzf)

当我只是在 shell 中运行代码时,它会做我想做的事(除了抱怨xargs: unmatched single quote;....

但是,当我将它放入一个函数并获取包含它的文件时,sed 抱怨no matches found: s/^/~//

如何使函数的行为与代码在交互式 shell 中运行时的行为相同?不同行为的原因是什么?

标签: shellzshfixedfzf

解决方案


zsh在将结果传递给sed. 默认情况下,zsh将不匹配的模式视为错误,而不是像bash默认情况下那样将其保留为文字字符串。

解决方案是简单地引用您想要zsh单独留下的内容。

myVar=$(fd -t d -t f . ~ | xargs realpath --relative-to=$HOME | sed "s/^/~\//" | fzf)

推荐阅读