A parte (...)
do seu comando é o seu problema. Os parênteses criam um subnível separado. O subshell herdará o ambiente de seu shell pai, mas as variáveis configuradas dentro dele não reterão seus novos valores depois que a subshell sair. Isso também vale para qualquer outra alteração no ambiente dentro do subshell, incluindo a mudança de diretórios, a configuração de opções de shell, etc.
Portanto, remova o subnível:
if [ 1 = 1 ]; then a=2; fi
echo "$a"