Como obter os itens múltiplos escolhidos de um Checklist no Dialog

A caixa Checklist é idêntica a Radiolist já vista, a única diferença é o usuário poder escolher mais de um item; é uma caixa de múltipla escolha.

Primeiro, vamos fazer um menu com opções para o usuário escolher:

estilos=$( dialog --stdout \
	--checklist 'Você gosta de:' 0 0 0 \
	rock  '' ON  \
	samba '' OFF \
	metal '' ON  \
	jazz  '' OFF \
	pop   '' ON  \
	mpb   '' OFF )
echo "Você escolheu: $estilos"

rock1

A sintaxe é a mesma da Radiolist, e compomos uma lista onde os itens não têm descrição (usando as aspas vazias ”). A diferença agora é que temos mais de um item selecionado.

Note que o Dialog retorna todos na mesma linha, com cada item escolhido entre aspas duplas. Esse retorno em apenas uma linha requer conhecimento em Sed, Awk ou outro editor programável para se identificar e extrair corretamente os itens escolhidos.

Como isso dificulta o uso do Dialog, ele possui uma opção de linha de comando chamada --separate-output, que ao invés de retornar tudo em uma linha, retorna os itens selecionados um por linha, e sem as aspas. Dessa maneira fica bem mais fácil varrer e descobrir os itens escolhidos com o ‘while’:

estilos=$( dialog --stdout \
	--separate-output \
	--checklist 'Você gosta de:' 0 0 0 \
	rock  '' ON  \
	samba '' OFF \
	metal '' ON  \
	jazz  '' OFF \
	pop   '' ON  \
	mpb   '' OFF )

echo "$estilos" | while read LINHA
do
 	echo "--- $LINHA"
done

rock2