我正在教某人 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