在 bash 中,如何在双引号内扩展通配符?



我想在bash中编写以下函数:

go() {
  cd "~/project/entry ${1}*"
}

这样做的目的是cd到一个前缀为entry(注释空间)的项目子目录中,并且可能有一个长后缀。我只需要给它一个部分名称,它就会完成目录名的后缀。

因此,例如,如果我有以下文件夹:

~/project/entry alpha some longer folder name
~/project/entry beta another folder name
~/project/entry gamma

我可以运行go b,它将使我进入~/project/entry beta another folder name

当然,问题是通配符不能在双引号内展开。我不能省略引号,因为那样我就无法正确地捕捉空格。

如何在保留空格的同时扩展通配符?

移动引号。只是不要引用*。不引用~可能也不错。

go() {
  cd ~/"project/entry ${1}"*
}

也就是说,如果这与多个匹配,cd将使用第一个匹配并忽略所有其他匹配。

最新更新