20 lines
426 B
Bash
20 lines
426 B
Bash
#!/usr/bin/bash
|
|
|
|
range_expand () (
|
|
IFS=,
|
|
set -- $1
|
|
n=$#
|
|
for element; do
|
|
if [[ $element =~ ^(-?[0-9]+)-(-?[0-9]+)$ ]]; then
|
|
set -- "$@" $(eval echo "{${BASH_REMATCH[1]}..${BASH_REMATCH[2]}}")
|
|
else
|
|
set -- "$@" $element
|
|
fi
|
|
done
|
|
shift $n
|
|
echo "$@"
|
|
# to return a comma-separated value: echo "${*// /,}"
|
|
)
|
|
|
|
range_expand "-6,-3--1,3-5,7-11,14,15,17-20"
|