如何在 Bash 命令行上扩展 *

如何在 Bash 命令行上扩展 *

我理解如果你输入ls *它实际上会扩展为ls a b c当前直接有文件时ab并且c

我想知道在按下回车键之前是否有办法扩展它。类似于Ctrl+X作品,或制表符完成作品。

所以为了让我自己清楚

$ ls *
<press magic key>
$ ls a b c

类似于:

$ ls ~/
<press tab>
$ ls /home/username

我以为我以前见过这个但我可能是弄错了。

答案1

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

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

添加类似这样的内容到你的~/.inputrc

Control-x: glob-expand-word

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

答案2

在 bash 中,readline 功能被调用并且默认glob-expand-word绑定。CtrlX*

答案3

当您处于vi模式 ( set -o vi) 时,“魔法键”为Esc*。它与bash和均有效ksh

答案4

glob-expand-word (\Cx*) 的替代方案是 insert-completions (\e*)。它不需要末尾的星号,但也包括其他补全,例如隐藏文件。我在 ~/.inputrc 中重新绑定了这两个选项:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-word (\eg) 可用于将例如转换/System/Library/Launch*/*Finder/System/Library/LaunchAgents/com.apple.Finder.plist

相关内容