以管道开头的 bash 别名不起作用?

以管道开头的 bash 别名不起作用?

我正在尝试创建一个以管道开头的别名。

前任:

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"

相关内容