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?

1 Answer 1

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 ; }
2
  • 2
    +1 Safer to quote the positional params. Nov 2, 2012 at 20:14
  • Very true. Edited to correct that. Nov 2, 2012 at 20:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .