Suppose I have a bash array
X=("a" "b c" "-d" "k j", "-f")
I want to filter by whether starting with "-" and get
("a" "b c" "k j") and ("-d" "-f") respectively.
How can I achieve that?
From an answer to a similar question, you could do this:
A=$((IFS=$'\n' && echo "${X[*]}") | grep '^-')
B=$((IFS=$'\n' && echo "${X[*]}") | grep -v '^-')
From that answer:
The meat here is that IFS=$'\n' causes "${MY_ARR[*]}" to expand with newlines separating the items, so it can be piped through grep. In particular, this will handle spaces embedded inside the items of the array.
We then use grep / grep -v to filter in / out elements matching the pattern
getoptsto parse arguments.