Bash

bash 中的 grom() 關鍵字拋出意外的 ‘(’ 標記

  • March 26, 2015

我不完全確定為什麼我的錯誤.bash_profile

syntax error near unexpected token `('

grom()當我為我的函式使用關鍵字時。我想創建一個 bash 函式,它會自動將我的 master 分支重新設置為 origin

# git status
alias gs='git status'

# git stash list
alias gsl='git stash list'  

grom() {
 branch_name="$(git symbolic-ref --short -q HEAD)"
 git fetch && git rebase origin/master && git checkout master && git rebase origin/master && git checkout $branch_name
}

# git stash apply. must append stash@{num}
alias gsa="git stash apply"

當我更改函式的名稱時,它編譯得很好。我找不到grom關鍵字,所以我不確定問題是什麼。如果我將函式重命名為其他類似的名稱git-rom,甚至類似的groms名稱,它編譯得很好。是否有一些特殊的關鍵字不起作用?這是在 Mac OS X 上。

如果您正在使用bash,則將其聲明為:

function grom() { … }

(注意:在嚴格的 POSIX shell 中function 不起作用dash!)


@aug建議(通過對此答案的編輯)這是由於別名衝突(或者,不太合理的是,以某種方式定義的內置函式)。

保留字函式要麼改變載入順序以搶占衝突(在函式定義期間擴展別名),要麼通過禁用 bash 的posix 模式(可能允許覆蓋內置)來避免問題。

bash(1)手冊頁:

別名在讀取函式定義時擴展,而不是在執行函式時擴展,因為函式定義本身就是一個複合命令。因此,在函式中定義的別名在該函式執行之前不可用。

如果您有一個衝突的別名,您可以unalias grom在採購之前嘗試.bash_profile(沒有必要添加到該文件,除非您仍在定義該衝突的別名)以清除您過去的實驗。或者,啟動一個新終端以重新開始。

引用自:https://unix.stackexchange.com/questions/192518