shell 当我打开终端时,脚本函数总是显示 globurl=noglob urlglobber

shell script function always shows globurl=noglob urlglobber when I open the terminal

可能已经回答了,但我已经在互联网上查看了一段时间,但我无法弄清楚为什么会这样。

我在shell

中有这个功能
alias google= function google(){
        if [[ -n "$@" ]] 
        then
                echo "you typed "

        fi
}

现在我正在测试。我想在终端上创建自己的 google 搜索。代码可以正常工作,但每次我打开终端时,总是会出现以下消息:

you typed globurl=noglob urlglobber   

为什么总是给我看这个?我错过了一些步骤吗?我不习惯使用 shell 代码,所以可能真的很傻

顺便说一句,我正在使用 ZSH

错误原因

您收到此消息的原因是,您实际上是在用您的函数覆盖内置 aliaszsh 允许通过在 () 之前给出多个名称来创建具有多个名称的函数。例如:

foo bar baz () {
    echo [=10=] $@
}

这定义了三个(相同的)函数,名称为 foobarbaz。当您 运行 您的代码片段时:

alias google= function google(){
  # [...]
}

您还定义了三个函数:aliasgoogle=googlefunction 没有被覆盖,因为它是一个 zsh 保留字,但它也不能用作命令,因为它不是首先出现的。

因此,您配置中的以下(或非常相似的)行实际上并未通过 运行 宁 builtin alias alias:

alias globurl="noglob urlglobber"

相反,函数 alias 是 运行,第一个参数是 globurl="noglob urlglobber"

解决方案

创建函数时不需要别名。试试这个:

function google () {
    if [[ -n "$@" ]] 
    then
        echo "you typed "
    fi
}