Вы можете вызвать set и сбросить позиционные параметры в любое время, например,
function q {
echo ${@}
set $2 $3 $4
echo ${@}
set $4
echo ${@}
}
q 1 2 3 4
, затем вырезать то, что вы не хотите из массива, приведенный ниже код делает это ... не уверен, что еголучший способ сделать это, хотя, был в стеке в поисках лучшего способа;)
#!/bin/bash
q=( one two three four five )
echo -e "
(remove) { [:range:] } <- [:list:]
| [:range:] => return list with range removed range is in the form of [:digit:]-[:digit:]
"
function remove {
if [[ $1 =~ ([[:digit:]])(-([[:digit:]]))? ]]; then
from=${BASH_REMATCH[1]}
to=${BASH_REMATCH[3]}
else
echo bad range
fi;shift
array=( ${@} )
local start=${array[@]::${from}}
local rest
[ -n "$to" ] && rest=${array[@]:((${to}+1))} || rest=${array[@]:((${from}+1))}
echo ${start[@]} ${rest[@]}
}
q=( `remove 1 ${q[*]}` )
echo ${q[@]}