Shell “预处理”中的结果;fd";加上~/&引用;对于fzf。Sed抱怨没有找到匹配项`

Shell “预处理”中的结果;fd";加上~/&引用;对于fzf。Sed抱怨没有找到匹配项`,shell,zsh,fixed,fzf,Shell,Zsh,Fixed,Fzf,我试图在zsh中为fzf创建一个函数 我想在fzf中列出我的主文件夹下的所有目录和文件,在它们前面加上“~/”,然后最终将我的选择保存在一个变量中 到目前为止,我有: myVar=$(fd-td-tf.~| xargs realpath-相对=$HOME | sed s/^/~\/| fzf) 当我在shell中运行代码时,它做了我想要的事情(除了抱怨xargs:unmatched single quote;…) 但是,当我把它放在函数中并从包含它的文件中获取源代码时,sed抱怨没有找到匹配项:

我试图在zsh中为fzf创建一个函数

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

到目前为止,我有:

myVar=$(fd-td-tf.~| xargs realpath-相对=$HOME | sed s/^/~\/| fzf)

当我在shell中运行代码时,它做了我想要的事情(除了抱怨
xargs:unmatched single quote;…

但是,当我把它放在函数中并从包含它的文件中获取源代码时,sed抱怨没有找到匹配项:s/^/~/


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

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

解决方法是简单地引用你想要的
zsh
来让它独立

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

myVar=$(fd-td-tf.~| xargs realpath-relative=$HOME | sed“s/^/~\/”| fzf)
谢谢!您能澄清一下吗:“…zsh将不匹配的模式视为错误…”这意味着zsh试图将
s/^/~/
解释为字符串以外的内容?您似乎设置了
extendedglob
选项,因此
sed
命令中的
^
使该单词成为一种模式,
zsh
试图扩展。扩展失败的方式有很多,最明显的一种可能是当前工作目录中没有直接命名的
s