在 bash 配置文件中定义函数时,意外标记 `(' 附近出现语法错误

问题描述 投票:0回答:2
gac() {
        git add .
        git commit -m "$1"
}

此函数位于我的 bash 配置文件中,当我尝试获取该文件时,它会引发错误。

$ source ~/.bashrc
bash: /home/sahandz/.bashrc: line 176: syntax error near unexpected token `('
bash: /home/sahandz/.bashrc: line 176: `gac() {'

我不明白为什么。我有另一个函数,看起来像这样并且不会引发任何错误:

abcToTestDir() {
        folderName=${1%_*}
        testFolderPath="$testfilespath$folderName"
        abcFilePath="$abcpath$folderName/$1"
        testFilePath="$testFolderPath/$1"

        mkdir -p $testFolderPath
        cp $abcFilePath $testFilePath
}

我的函数定义有什么问题?

bash function alias
2个回答
6
投票

如果

gac
已经是别名,就会发生这种情况。例如在我的机器上:

$ type ls
ls is aliased to `ls --color=auto'
$ ls(){ true; }
bash: syntax error near unexpected token `('

0
投票

现有答案是正确的。此答案是为了提供更多信息。

当您使用 POSIX 语法(如

ls()
)定义函数时,在定义别名之后,Bash 会在之前解析您的函数定义来扩展别名。换句话说,你的函数定义变成了

ls --color=auto() {
    true
}

这就是您看到错误消息的原因。 这篇文章这个问题中提到了这种行为。就您而言,您最终取消了它的别名,因为您不需要它;但对于希望两者都保留的人(来自搜索引擎的人),还有两个选择:

  1. 使用带有
    function
    关键字的新型函数定义,例如
    function ls() { ... }
    。不过,这破坏了可移植性(如果你关心这一点)。
  2. 在函数之后定义别名。 (或者暂时保存别名,定义函数,然后恢复别名。)
© www.soinside.com 2019 - 2024. All rights reserved.