如何在 Bash 命令行上扩展 *

bra*_*amp 38 bash autocomplete globbing

我明白,如果你输入ls *它实际上是扩展到ls a b c当前直接有文件的时候abc.

我想知道在我输入之前是否有办法扩展它。类似于Ctrl+X 的工作方式,或Tab Complete 的工作方式。

所以为了让自己清楚

$ ls *
<press magic key>
$ ls a b c
Run Code Online (Sandbox Code Playgroud)

以类似的方式:

$ ls ~/
<press tab>
$ ls /home/username
Run Code Online (Sandbox Code Playgroud)

我以为我以前看过这个,但我可能弄错了。

Ign*_*ams 26

在 bash 中,readline 功能被调用glob-expand-wordCtrlX*默认绑定到。


cYr*_*rus 24

您可以使用glob-expand-wordman 中的函数bash

point 之前的单词被视为路径名的模式
扩展,并插入匹配的文件名列表,
替换这个词。如果提供了数字参数,则
星号附加在路径名扩展之前。

将这样的内容添加到您的~/.inputrc

Control-x: glob-expand-word
Run Code Online (Sandbox Code Playgroud)

因此,在您的示例中,$ ls *随后的Ctrl-X将扩展为$ ls a b c

  • 应该已经绑定了。并且 Ctrl-x 已经被绑定为一堆东西的前缀。做`绑定-p | grep 'C-x'` 来查看它们。 (9认同)
  • @Dennis:它在我的系统上绑定到 `Cx*`。 (3认同)

jll*_*gre 14

当您处于vi模式 ( set -o vi) 时,“魔法钥匙”是Esc*。这适用于bashksh


Ste*_*nny 6

$ 绑定 -q glob-expand-word
glob-expand-word 可以通过“\Cx*”调用。

$bind-q 插入完成
插入完成可以通过“\e*”调用。

所以要使用这些我们可以做

ls * Ctrl+x *

或者

ls * Esc *

在按 Enter 键之前展开复杂的行