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
}
我的函数定义有什么问题?
如果
gac
已经是别名,就会发生这种情况。例如在我的机器上:
$ type ls
ls is aliased to `ls --color=auto'
$ ls(){ true; }
bash: syntax error near unexpected token `('
现有答案是正确的。此答案是为了提供更多信息。
当您使用 POSIX 语法(如
ls()
)定义函数时,在定义别名之后,Bash 会在之前解析您的函数定义来扩展别名。换句话说,你的函数定义变成了
ls --color=auto() {
true
}
这就是您看到错误消息的原因。 这篇文章和这个问题中提到了这种行为。就您而言,您最终取消了它的别名,因为您不需要它;但对于希望两者都保留的人(来自搜索引擎的人),还有两个选择:
function
关键字的新型函数定义,例如 function ls() { ... }
。不过,这破坏了可移植性(如果你关心这一点)。