Shell “预处理”中的结果;fd";加上~/&引用;对于fzf。Sed抱怨没有找到匹配项`
我试图在zsh中为fzf创建一个函数 我想在fzf中列出我的主文件夹下的所有目录和文件,在它们前面加上“~/”,然后最终将我的选择保存在一个变量中 到目前为止,我有: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抱怨没有找到匹配项:
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
。