1

我正在使用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() {'

但是,如果我将函数名称从dfto更改为diroref或者anything_else我不会收到错误消息。

我假设这df是一个保留字,但是当我在 bash 中检查这个保留字列表时,我找不到它。(而且我认为它不应该成为一个,无论如何!)

那么,任何人都可以对此有所了解吗?为什么 bash 禁止我定义一个名为 的 shell 函数df

4

1 回答 1

4

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

$ 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
于 2019-09-27T23:48:47.363 回答