如何將我的參數放入 Bash 別名指令中?

如何將我的參數放入 Bash 別名指令中?

我的 bashrc 中通常有以下簡單別名:

alias g="grep --color=always --exclude-dir=\*.svn\*"

但現在我必須在只有 GNU grep 2.5 的系統上工作,因此沒有--exclude-dir爭論。

現在我需要這樣的東西才能工作:

alias g="grep --color=always $1 $2 | grep -v .svn"

但當然,參數會附加到別名的結尾。 $1 和 $2 在建立別名時解析,而不是在呼叫別名時解析,即使使用強引號也是如此。

我可以在不訴諸額外腳本或函數的情況下解決這個問題嗎?

答案1

不,你不能。正如 bash 手冊所述:

沒有在替換文字中使用參數的機制,如“csh”中。如果需要參數,則應使用 shell 函數(*note Shell Functions::)。

函數是正確的選擇,並且可以像別名一樣容易編寫。在這種情況下,它可能是

function g () { grep --color=always "$1" "$2" | grep -v .svn ; }

相關內容