如何在bash中模拟来自zsh的全局别名?

如何在bash中模拟来自zsh的全局别名?,bash,zsh,Bash,Zsh,在zsh中,可以定义全局别名。比如说, alias -g G='| grep' alias -g W='| wc -l' 然后像这样使用它们: some_command G some_text W 是否可以在bash中模拟全局别名?如果您不想将大写字母G用于任何其他用途,可以将其添加到.bashrc文件中: bind '"G": "| grep"' 这将在您键入G后立即将其展开为| grep。也就是说,Shift+g不再产生大写字母g,而是字符串|grep。您可能希望选择一个较长的序列,该

zsh
中,可以定义全局别名。比如说,

alias -g G='| grep'
alias -g W='| wc -l'
然后像这样使用它们:

some_command G some_text W

是否可以在
bash
中模拟全局别名?

如果您不想将大写字母G用于任何其他用途,可以将其添加到
.bashrc
文件中:

bind '"G": "| grep"'

这将在您键入G后立即将其展开为
| grep
。也就是说,Shift+g不再产生大写字母g,而是字符串
|grep
。您可能希望选择一个较长的序列,该序列本身或作为另一个单词的一部分,您永远不会希望以其他方式键入。

您可以将其保存到变量中

g='| grep'
那么,你的命令可能是

eval some_command $G some_text

some_命令$G some_文本
Ctrl+Alt+E(在其他系统上,它是?
Ctrl+x+*
并且是可配置的)

它将命令展开为所需的
some_命令| grep some_text
,然后您可以按Enter键。不应展开的变量必须在单引号中


但与zsh不同。

我相信如果您想在系统范围内使用别名,您必须编辑~/.bashrc文件。这是一个关于如何在Ubuntu上实现的问题,也许你可以根据自己的需要修改答案system@Ploutox1)这里的“全球”是指“对整个命令行来说,不仅仅是第一个词。2) 由于
~/.bashrc
位于用户的主目录中,因此它不是进行系统范围设置的地方。@Adaephon关于第二点,您可以使用/etc/bash.bashrc来代替在系统范围内应用设置。首先,我应该编写以下路径:)您可能可以设置一个
readline
宏,以便在键入时自动将
G
扩展到
| grep
,但这有一个明显的缺点,即防止您出于任何其他目的键入G。当你得到一个足够清晰的宏名以防止不必要的扩展时,你最好只键入
|grep
。多么糟糕的主意!哈哈。我花了一段时间才明白@kojiro的回答。但一旦我得到了它,我就是罗夫兰,人们(显然)只花了62个月就无视我的警告和否决票:)