Let’s say I have a function in Bash:
function ll {
command ls -l $*
}
so it is to make ll works like ls -l. Most of the cases, it will work, but
ls -l "ha ha"
can work for the file with name ha ha, but
ll "ha ha"
will fail, because it is taken to be
ls -l ha ha
Is there a way to make this work? I think we could have made it
function ll {
command ls -l "$@"
}
(note that "$@" is different from "$*", with "$@" meaning individually quoted, while "$*" means all quoted in one string)
But then, ll -t "ha ha" would become ls -l "-t" "ha ha", which actually works, but is kind of weird, and I am not sure if it may break down in some cases.
Is there another way to make it work, and another thing is, I think in the function, command ls -l "$@" and ls -l "$@" is the same? (command is just to run the program directly and not call any possible bash function to prevent recursion from happening?)
Since the shell performs quote removal before it executes the
lsthere is no problem. You can safely useand call it as
ll -t "ha ha". See your shell’s manual page and search for “quote removal”.