Você não pode definir variáveis em um pipeline e ter o valor disponível fora do pipe. Ao executar um pipeline, cada parte executa seu próprio subshell, portanto, o comando read
está em sua própria sub-shell. Um subshell não pode modificar o ambiente do pai, então as variáveis que você definiu não estão disponíveis para o pai.
Para contornar isso, você poderia fazer como @AFH diz e alterar o comando para que somente o que você deseja seja impresso e então atribuir isso a uma variável no shell pai.
Como alternativa, você poderia reestruturar os comandos para não estar lendo. Eu preferiria a abordagem do AFH, mas a reordenação poderia parecer:
IFS=" " read INTERNAL_OUTPUT con < <(xrandr|grep " connected primary")
onde redirecionamos a entrada de read
para uma substituição de processo que faz o resto do comando, então read
ainda está no shell pai.