是否可以通过执行来展示 bash 通配符是如何工作的?

是否可以通过执行来展示 bash 通配符是如何工作的?

我正在教某人 bash 通配符如何工作。我想展示(如果可能的话,通过一些 bash 调试功能)bash 如何在调用命令之前扩展模式。例如我想执行以下操作:

ls -l file*.txt

然后我想 bash 显示file*.txt扩展后的内容:

ls -l file1.txt file2.txt file3.txt file4.txt

我知道如何在脚本中使用此操作bash -x,但我更喜欢在交互式 shell 中执行此操作,这样我就不必引入有关脚本的想法。有没有办法做到这一点交互模式

答案1

您可以简单地回显整个命令:

echo ls -l file*.txt

答案2

好吧,这基本上就是我通常在我的设置中.inputrc获得zsh类似行为的内容bash

set show-all-if-unmodified on
set show-all-if-ambiguous on

将以上几行放入~.inputrc即可。当执行诸如 tab 之类的操作时ls *.txt,它应该为您提供所有内容并输出匹配的文件。

编辑:引用自man bash

如果不明确则显示全部(关闭) 这会改变完成函数的默认行为。如果设置为“开”,则具有多个可能完成的单词会导致立即列出匹配项,而不是敲响铃声。

如果未修改则显示全部(关闭) 这会以类似于“如果不明确则显示全部”的方式改变完成函数的默认行为。如果设置为“开”,则具有多个可能的完成而没有任何可能的部分完成(可能的完成不共享公共前缀)的单词会导致立即列出匹配项,而不是敲响铃声。

EDIT2:示例输出

$ ls *
books    dev    music   templates
$ ls *

尽管如果尝试扩展以下内容(因为它会尝试完成后面的参数~/some/other/folder),它就不起作用:

$ cd * ~/some/other/folder

相关内容