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

In bash, how do I expand a wildcard while it's inside double quotes?

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

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

这样做的目的是将 cd 放入一个前缀为 entry(注意 space)并且可能有一个长后缀的项目子目录。我只需要给它一个部分名称,它将完成目录名称的后缀。

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

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

我可以 运行 go b 它会让我进入 ~/project/entry beta another folder name

当然,问题是通配符没有在双引号内展开。我不能省略引号,因为那样我将无法正确捕获 spaces。

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

移动引号。只是不要引用 *。最好不要引用 ~.

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

话虽这么说,如果它匹配不止一个东西 cd 将使用第一个匹配项并忽略所有其他匹配项。