The best way, if you want to be able to pass on the parameters to another process, or handle space separated parameters, is to re-set
the parameters:
$ x(){ echo "Parameter count before: $#"; set -- "${@:1:2}" "${@:4:8}"; echo "$@"; echo "Parameter count after: $#"; }
$ x 1 2 3 4 5 6 7 8
Parameter count before: 8
1 2 4 5 6 7 8
Parameter count after: 7
To test that it works with non-trivial parameters:
$ x $'a
1' $'b2' 'c 3' 'd 4' 'e 5' 'f 6' 'g 7' $'h8'
Parameter count before: 8
a
1 2 d 4 e 5 f 6 g 7 h 8
Parameter count after: 7
(Yes, $''
is a backspace)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…