为什么 bash 禁止 shell 名为 `df` 的函数?
Why does bash prohibit a shell function named `df`?
我正在使用 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
的 shell 函数?
发生这种情况是因为您之前为此名称定义了别名。别名是简单的字符串前缀替换,因此会干扰函数定义:
$ 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, "; }
$ foo
Hello, --bar
我正在使用 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
的 shell 函数?
发生这种情况是因为您之前为此名称定义了别名。别名是简单的字符串前缀替换,因此会干扰函数定义:
$ 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, "; }
$ foo
Hello, --bar