Bash 命令行编辑

Bash 命令行编辑

我有两个问题。

Q1. 我读了一篇文章http://www.thegeekstuff.com/2014/05/linux-keybindings/comment-page-1/#comment-1750752在此 cntrl+/ 可以完美地重做上次撤消的编辑,但 Cntrl+? 不行。我的系统详细信息是

[mike@localhost rshare]$ lsb_release -a
LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Release:        5.4
Codename:       Tikanga

和终端设置是

[mike@localhost rshare]$ stty
speed 9600 baud; line = 0;
erase = ^H;
-brkint ixoff -imaxbel

请提供 bash 键盘快捷键的良好参考。


Q2.$ echo *打印当前目录中的所有文件,而$ echo .仅打印"."(不带引号)。我的问题是为什么它不打印当前目录中的所有文件(包括隐藏文件)?

答案1

1. 按键绑定

正如该文章中所建议的,bind -p列出了键绑定。

$ bind -p | egrep 'redo|undo'
"\C-x\C-u": undo
"\C-_": undo
# vi-redo (not bound)

请注意,bash 有 vi 模式和 emacs 模式。按键的行为会根据您选择的模式而有所不同。

2. shell通配符扩展

.不是 shell 通配符(但它是正则表达式中的元字符)。相反,我会使用

echo .*

或者

echo .??*

因为我通常对此不感兴趣.,并且..没有名称很小的隐藏文件。

迈克尔·柯约林指出了一种更优越的模式:

echo .[^.]*

只需输入几个字符即可。

相关内容