I have a simple script where the first argument is reserved for the filename, and all other optional arguments should be passed to other parts of the script.
Using Google I found this wiki, but it provided a literal example:
echo "${@: -1}"
I can't get anything else to work, like:
echo "${@:2,1}"
I get "Bad substitution" from the terminal.
What is the problem, and how can I process all but the first argument passed to a bash script?
Best Answer
Use this:
The following syntax:
would work as well, but is not recommended, because as @Gordon already explained, that using
*
, it runs all of the arguments together as a single argument with spaces, while@
preserves the breaks between them (even if some of the arguments themselves contain spaces). It doesn't make the difference withecho
, but it matters for many other commands.