Bash别名问题

joh*_*uir 3 grep bash alias

我不明白为什么使用别名会提示错误,但使用没有别名的相同语法不会......

alias grep='egrep -iIs '
19:47:24 ~
cat /etc/services | \grep ssh
ssh     22/tcp              # SSH Remote Login Protocol
19:47:26 ~
cat /etc/services | grep ssh
grep: option requires an argument -- 'X'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
19:47:33 ~
cat /etc/services | egrep -iIs ssh
ssh     22/tcp              # SSH Remote Login Protocol
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?

ste*_*ver 10

ALIASES部分所述man bash

如果别名值的最后一个字符是空白,则还检查别名之后的下一个命令字的别名扩展。

由于您已经grep使用这样一个空白的最后一个字符定义了别名,shell 还将扩展您为其定义的任何别名ssh-alias ssh='ssh -X'例如,如果是这样,那么命令将变为

cat /etc/services | egrep -iIs ssh -X
Run Code Online (Sandbox Code Playgroud)

它将-X作为附加参数传递给egrep.

除非有特殊原因需要包含尾随空白,否则只需定义没有它的别名,即

alias grep='egrep -iIs'
Run Code Online (Sandbox Code Playgroud)