0

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

4

1 回答 1

1

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

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

myVar=$(fd -t d -t f . ~ | xargs realpath --relative-to=$HOME | sed "s/^/~\//" | fzf)
于 2020-01-19T22:33:18.043 回答