Delete positional parameters in Bash? Delete positional parameters in Bash? bash bash

Delete positional parameters in Bash?


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 8Parameter count before: 81 2 4 5 6 7 8Parameter count after: 7

To test that it works with non-trivial parameters:

$ x $'a\n1' $'b\b2' 'c 3' 'd 4' 'e 5' 'f 6' 'g 7' $'h\t8'Parameter count before: 8a1 2 d 4 e 5 f 6 g 7 h   8Parameter count after: 7

(Yes, $'\b' is a backspace)


x(){    #CODE    params=( $* )    unset params[2]    set -- "${params[@]}"    echo "$@"}

Input:x 1 2 3 4 5 6 7 8

Output:1 2 4 5 6 7 8


From tldp

# The "unset" command deletes elements of an array, or entire array.unset colors[1]              # Remove 2nd element of array.                             # Same effect as   colors[1]=echo  ${colors[@]}           # List array again, missing 2nd element.unset colors                 # Delete entire array.                             #  unset colors[*] and                             #+ unset colors[@] also work.echo; echo -n "Colors gone."               echo ${colors[@]}            # List array again, now empty.