我在用 GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu) .
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
dir
ef
anything_else
我想 df 不知怎的是个保留字但当我检查这个 list of reserved words in bash 我找不到。(无论如何,我认为它不应该成为一个。)
有人能解释一下吗?为什么bash禁止我定义一个名为 df ?
发生这种情况是因为您之前已为此名称定义了别名。别名是简单的字符串前缀替换,因此会干扰函数定义:
$ alias foo='foo --bar' $ foo() { echo "Hello"; } bash: syntax error near unexpected token `('
这相当于(并以与相同的错误失败)
$ foo --bar() { echo "Hello"; } bash: syntax error near unexpected token `('
要声明名称已被别名覆盖的函数,可以使用 function 关键词:
function
$ alias foo='foo --bar' $ function foo() { echo "Hello, $1"; } $ foo Hello, --bar