How do I forward parameters to other command in ba

2019-01-30 03:54发布

问题:

Inside my bash script, I would like to parse zero, one or two parameters (the script can recognize them), then forward the remaining parameters to a command invoked in the script. How can I do that?

回答1:

Use the shift built-in command to "eat" the arguments. Then call the child process and pass it the "$@" argument to include all remaining arguments. Notice the quotes, they should be kept, since they cause the expansion of the argument list to be properly quoted.



回答2:

bash uses the shift command:

e.g. shifttest.sh:

#!/bin/bash
echo $1
shift
echo $1 $2

shifttest.sh 1 2 3 produces

1
2 3


回答3:

bash supports subsetting parameters (see Subsets and substrings), so you can choose which parameters to process/pass like this:

open new file and edit it: vim r.sh

echo "params only 2    : ${@:2:1}"
echo "params 2 and 3   : ${@:2:2}"
echo "params all from 2: ${@:2:99}"

run it:

chmod u+x r.sh
 ./r.sh 1 2 3 4 5 6 7 8 9 10

the result is:

params only 2    : 2
params 2 and 3   : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10