É uma questão da ordem em que as diferentes etapas de avaliação de um comando acontecem.
A=10 echo $A primeiro analisa o comando em um comando simples composto de três palavras A=10 , echo e $A . Então cada palavra sofre uma substituição variável, isto é, a transformação de expansões variáveis como $A em seus valores (estou omitindo etapas que não fazem nada visível).
Se A tiver o valor foo inicialmente, o resultado das etapas de expansão será um comando simples que ainda tem três palavras: A=10 , echo e foo . (O shell também lembra neste ponto quais caracteres estavam inicialmente entre aspas - neste caso, nenhum.) O próximo passo é executar o comando. Como A=10 começa com um nome de variável válido seguido por um sinal de igual, ele é tratado como uma atribuição; a variável A está definida como 10 no shell e no ambiente durante a execução do comando. (Normalmente você precisa escrever export A para ter A no ambiente e não apenas como uma variável shell; isso é uma exceção.) A próxima palavra não é uma atribuição, então é tratada como um nome de comando -no comando). O comando echo não depende de nenhuma variável, portanto A=10 echo $A tem exatamente o mesmo efeito que echo $A .
Se você quiser definir uma variável apenas para a duração de um comando, mas levando a atribuição em consideração enquanto executa o comando, você pode usar um subshell. Um subshell, indicado por parênteses, faz com que todas as mudanças de estado (atribuições de variáveis, diretório atual, definições de funções, etc.) sejam locais para o subshell.
(A=10; echo $A)
Faça esse export A=10 se você quiser exportar a variável para o ambiente para que ela seja vista por programas externos.