代码之家  ›  专栏  ›  技术社区  ›  aghast

为什么bash禁止名为'df'的shell函数?

  •  1
  • aghast  · 技术社区  · 5 年前

    我在用 GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu) .

    我的一个启动文件中有以下几行:

    df() {
            printf "Hello, world!\n"
    }
    

    在获取该文件时,我遇到以下错误:

    -bash: sh/interactive.sh: line 109: syntax error near unexpected token `('
    -bash: sh/interactive.sh: line 109: `df() {'
    

    但是,如果我将函数名从 df dir ef anything_else 我不明白这个错误。

    我想 df 不知怎的是个保留字但当我检查这个 list of reserved words in bash 我找不到。(无论如何,我认为它不应该成为一个。)

    有人能解释一下吗?为什么bash禁止我定义一个名为 df ?

    1 回复  |  直到 5 年前
        1
  •  4
  •   that other guy    5 年前

    发生这种情况是因为您之前已为此名称定义了别名。别名是简单的字符串前缀替换,因此会干扰函数定义:

    $ alias foo='foo --bar'
    $ foo() { echo "Hello"; }
    bash: syntax error near unexpected token `('
    

    这相当于(并以与相同的错误失败)

    $ foo --bar() { echo "Hello"; }
    bash: syntax error near unexpected token `('
    

    要声明名称已被别名覆盖的函数,可以使用 function 关键词:

    $ alias foo='foo --bar'
    $ function foo() { echo "Hello, $1"; }
    $ foo
    Hello, --bar