在 "fd" 的结果前加上 fzf 的“~/”。 Sed 抱怨“找不到匹配项”

Prepend results from "fd" with "~/" for fzf. Sed complains `no matches found`

我正在尝试在 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 中代码为 运行 时的行为相同?不同行为的原因是什么?

zsh 试图在将结果传递给 sed 之前对参数执行路径名生成。默认情况下,zsh 将不匹配的模式视为错误,而不是像 bash 默认情况下那样将其保留为文字字符串。

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

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