非第一个单词时的别名: `G='|grep'` 然后是 `command G grep-string`

非第一个单词时的别名: `G='|grep'` 然后是 `command G grep-string`

我发现自己打字| grep很多| less,并且想知道是否有任何方法可以做类似的事情:

alias G='| grep -E'  # egrep is deprecated
alias L='| less'

所以我可以做这样的事情:

$ command G grepstring

或者

$ verbose-command L

我目前从 过渡bashzsh,所以如果可能的话请解决这两个 shell 的问题。

答案1

bash

我不知道如何做到这一点bash,因为手册说:

别名允许在用作单词时用字符串代替单词。第一的一个简单的命令。


zsh

help alias说:

如果该 -g 标志存在,则定义一个全局别名;全局别名即使不出现在命令位置也会被扩展。

所以在less例子中:

alias -g L="| less"

例子

zsh-lovers gives the following examples:

   alias -g ...='../..'
   alias -g ....='../../..'
   alias -g .....='../../../..'
   alias -g CA="2>&1 | cat -A"
   alias -g C='| wc -l'
   alias -g D="DISPLAY=:0.0"
   alias -g DN=/dev/null
   alias -g ED="export DISPLAY=:0.0"
   alias -g EG='|& egrep'
   alias -g EH='|& head'
   alias -g EL='|& less'
   alias -g ELS='|& less -S'
   alias -g ETL='|& tail -20'
   alias -g ET='|& tail'
   alias -g F=' | fmt -'
   alias -g G='| egrep'
   alias -g H='| head'
   alias -g HL='|& head -20'
   alias -g Sk="*~(*.bz2|*.gz|*.tgz|*.zip|*.z)"
   alias -g LL="2>&1 | less"
   alias -g L="| less"
   alias -g LS='| less -S'
   alias -g MM='| most'
   alias -g M='| more'
   alias -g NE="2> /dev/null"
   alias -g NS='| sort -n'
   alias -g NUL="> /dev/null 2>&1"
   alias -g PIPE='|'
   alias -g R=' > /c/aaa/tee.txt '
   alias -g RNS='| sort -nr'
   alias -g S='| sort'
   alias -g TL='| tail -20'
   alias -g T='| tail'
   alias -g US='| sort -u'
   alias -g VM=/var/log/messages
   alias -g X0G='| xargs -0 egrep'
   alias -g X0='| xargs -0'
   alias -g XG='| xargs egrep'
   alias -g X='| xargs'

答案2

Bourne Shell 支持别名,只要在命令行中看到名称,别名就会展开。

alias -a name=value

设置这样的别名。这个概念可以追溯到 1980 年第一个 UNIX 克隆 UNOS 的想法。请小心使用,因为name如果您不喜欢它被扩展,则需要逃脱。

看:http://schilytools.sourceforge.net/man/man1/bosh.1.html

与 1980 年 UNOS 界面类似的界面目前位于第 6 页,别名部分位于第 7 页,别名命令记录在第 36 页。

Bourne Shell 还实现了 UNOS 中持久别名的概念。

由于 Bourne Shell 中的别名比其他 shell 中的别名更强大,因此建议花一些时间使用该功能来了解它的功能。

相关内容