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