3

i usually have the following simple alias in my bashrc:

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

but now i have to work on systems that only have GNU grep 2.5, hence no --exclude-dir argument.

now i need something like this to work:

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

but of course, the arguments get appended to the end of the alias. $1 and $2 are parsed when the alias is created not when it's called, even with strong quotes.

Can i solve that without resorting to extra scripts or functions?

gcb
  • 5,442
  • 13
  • 62
  • 86

1 Answers1

8

No, you can't. As the bash manual states:

There is no mechanism for using arguments in the replacement text, as in `csh'. If arguments are needed, a shell function should be used (*note Shell Functions::).

Functions are the right thing for this, and can be as easy to write as an alias. In this case, it could be

function g () { grep --color=always "$1" "$2" | grep -v .svn ; }
Alan Shutko
  • 4,238