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?
I think you'll have to iterate through the array:
$ X=("a" "b c" "-d" "k j", "-f")
$ for elem in "${X[@]}"; do [[ $elem == -* ]] && with+=("$elem") || without+=("$elem"); done
$ printf "%s\n" "${with[@]}"
-d
-f
$ printf "%s\n" "${without[@]}"
a
b c
k j,
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With