Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm creating an alias for the following command with the tree program:

tree -P '*name*'

This works exactly as I want. But when I create an alias for this command, the command behaves differently: It only prints directories and not files.

In .bash_aliases

function tree_seek {
tree -P '*$1*' 

alias treeseek='tree_seek'

Why does the alias treeseek name does not do the same as tree -P '*name*'.

share|improve this question
@artistoex Could you elaborate on that? From what I can tell, this is no different from the deleted answer you commented on, since double-quoted asterisks aren't subject to expansion, so tree -P "*$1*" should work as well. – Daniel Beck Feb 14 '13 at 10:53
Indeed, using double quotes like Daniel Beck said works as well. Could you post this as a seperate answer? – Bentley4 Feb 14 '13 at 10:56
Aliases don't handle arguments, use a shell function. – vonbrand Feb 15 '13 at 3:27
up vote 2 down vote accepted

In Bash, single quotes won't interpolate anything. Try using double quotes in your function instead:

function tree_seek() {
  tree -P "*$1*" 

alias treeseek='tree_seek'
share|improve this answer
@daniel-beck: Sorry, I certainly didn't mean to hijack your answer. I didn't see your comment before I posted my answer. – Eero Helenius Feb 14 '13 at 10:58
+1 for finding out and for your apologies to Daniel Beck. – jaume Feb 14 '13 at 11:17

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.