Bash
bash 中的 grom() 關鍵字拋出意外的 ‘(’ 標記
我不完全確定為什麼我的錯誤
.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
(沒有必要添加到該文件,除非您仍在定義該衝突的別名)以清除您過去的實驗。或者,啟動一個新終端以重新開始。