expresiones regulares en expresión bash

Tengo 2 preguntas sobre expresiones regulares en la expresión de bash.

Modo 1.non-greedy

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

El resultado es

"a1b", "d" , "45"

En java

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

Puedo obtener el resultado a continuación.

"a1b"
"d"
"45"

Pero, ¿cómo puedo usar el modo no codicioso en bash?
Puedo entender por qué el \ "[^ \"]\" trabajos.
Pero no entiendo por qué el \ ".?\" No funcionan.

Partidos de 2.global

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

¿Cómo puedo conseguir todos los partidos?
ps: solo quiero usar expresiones regulares

Para la segunda pregunta, perdon por lo confuso.
Quiero hacer eco de "b" y "b", no contar "b".

¡Ayuda!

Respuestas a la pregunta(3)

Su respuesta a la pregunta