Aliases themselves do not take arguments. You can write Bash function for that case. Here is a “simple” example. I leave the comments there explaining the command too:
treegrep
treegrep() {
# grep:
# --recursive like --directories=recurse
# --files-with-match print only names of FILEs with selected lines
# tree:
# --fromfile Reads paths from files (.=stdin)
# -F Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
grep --recursive --files-with-match "${@}" |
tree --fromfile -F
}
yesno
You can also set variables to be local to the function, meaning they do not leak to outside or do not get confused with variables from outside the function:
# usage: yesno [prompt]
# example:
# yesno && echo yes
# yesno Continue? && echo yes || echo no
yesno() {
local prompt
local answer
if [[ "${#}" -gt 0 ]]; then
prompt="${*} "
fi
read -rp "${prompt}[y/n]: " answer
case "${answer}" in
[Yy0]*) return 0 ;;
[Nn1]*) return 1 ;;
*) return 2 ;;
esac
}






alias e='echo "${@}"'Wait a second, Bash does not process arguments in alias. This is an incredible trick new to me! All the years I was writing a function to accomplish that. I wonder if there is any drawback to this technique.