重击角色!特别历史司令部

重击角色!特别历史司令部

我们如何改变 bash 字符!对于其他直接单键字符的特殊历史命令,例如=

答案1

这可以使用以下方法完成变量histchars:

最多三个字符,用于控制历史扩展、快速替换和标记化(请参阅历史互动)。第一个字符是 历史扩展字符,即表示历史扩展开始的字符,通常为“ !”。第二个字符是当视为一行中的第一个字符时表示“快速替换”的字符,通常为“ ^”。可选的第三个字符是当作为单词的第一个字符找到时指示该行的其余部分是注释的字符,通常为“ #”。历史注释字符会导致该行中剩余单词的历史替换被跳过。它不一定会导致 shell 解析器将该行的其余部分视为注释。

所以:

$ echo foo
foo
$ histchars='=^'
$ =echo
echo foo
foo
$ 

但是:代码中偶尔会假设!历史扩展字符(主要用于设置异常,例如通配符)。将其设置为=会破坏很多事情,例如设置变量:

$ a=e
aecho foo
bash: aecho: command not found
$ a'='e
bash: a=e: command not found
$ a\=e
bash: a=e: command not found
$ printf -v a e
$ echo $a
e

相关内容