Quando você corre
FILE='/tmp/1.txt' echo "file: $FILE"
O shell expande a variável $ FILE antes de realizar a atribuição, portanto, supondo que FILE tenha sido desfeito anteriormente, você obteria:
FILE='/tmp/1.txt' echo "file: "
Você pode confirmar esse comportamento definindo primeiro FILE como um valor conhecido:
FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"
A segunda linha é expandida para:
FILE='/tmp/1.txt' echo "file: foo"
Em seguida, o valor de FILE, no contexto desse comando, mudou para /tmp/1.txt
. Então o shell executa echo "file: foo"
Como @admstg mencionado em sua resposta, você pode fazer:
FILE='/tmp/1.txt'; echo "file: FILE"
Mas esse comportamento é diferente do que você estava tentando originalmente. O que você tinha inicialmente define FILE somente durante o comando echo; os conjuntos acima são para a duração do shell (ou até que seja explicitamente não definido).