我正在尝试创建一个以管道开头的别名。
前任:
echo -i "hello\nworld" | grep world
> world
alias gr="| grep"
echo -i "hello\nworld" gr world
> hello
> world gr world
即,如果别名以管道开头,则别名似乎无法正常工作。有没有办法做到这一点?
答案1
从man bash
:
别名允许在用作简单命令的第一个单词时用字符串替换单词。
管道不能是简单命令的第一个单词。
答案2
哦,你的别名有效。单独尝试gr
一下,你的 shell 会因为|
在行的开头而抛出语法错误。这显然意味着别名有效,即将一个字符串替换为另一个字符串当它应该。
在您的示例中gr
被视为 的参数echo
,这就是没有替换的原因。即使别名中没有管道,情况也不会如此。初始管道符号并不决定是否发生混叠;然而,它会导致错误,但此错误与别名机制无关。
答案3
如果您可以/想要切换 shell,您可以在 zsh 中执行此操作,方法是将别名设置为
alias -g gr="| grep"