regex na expressão bash

Eu tenho 2 perguntas sobre o regex na expressão bash.

Modo 1.non-greedy

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

O resultado é

"a1b", "d" , "45"

Em java

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

Eu posso obter o resultado abaixo.

"a1b"
"d"
"45"

Mas como posso usar o modo não-ganancioso no bash?
Eu posso entender porque o \ "[^ \"]\" trabalho.
Mas eu não entendo porque o \ ".?\" não funciona.

Jogos 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

Como posso obter todos os jogos?
ps: Eu só quero usar regex.

Para a segunda pergunta, desculpe pelo confuso.
Eu quero eco "b" e "b", não contar "b".

Socorro!

questionAnswers(3)

yourAnswerToTheQuestion