Regex in bash Ausdruck

Ich habe 2 Fragen zu Regex in bash expression.

1. Nicht gieriger Modus

local temp_input='"a1b", "d" , "45"'
if [[ $temp_input =~ \".*?\" ]]
then
    echo ${BASH_REMATCH[0]}
fi

Das Ergebnis ist

"a1b", "d" , "45"

In Java

String str = "\"a1b\", \"d\" , \"45\"";
Matcher m = Pattern.compile("\".*?\"").matcher(str);
while (m.find()) {
    System.out.println(m.group());
}

Ich kann das Ergebnis unten sehen.

"a1b"
"d"
"45"

Aber wie kann ich den nicht gierigen Modus in Bash verwenden?
Ich kann verstehen, warum die \ "[^ \"]funktioniert.
Aber ich verstehe nicht, warum das ".?\" arbeite nicht.

2.globale Übereinstimmungen

local temp_input='abcba'
if [[ $temp_input =~ b ]]
then
    #I wanna echo 2 b here. 
    #How can I set the global flag?
fi

Wie kann ich alle Spiele bekommen?
ps: Ich möchte nur Regex verwenden.

Für die zweite Frage entschuldige die Verwirrung.
Ich möchte "b" und "b" wiederholen, nicht "b" zählen.

Hilfe!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage