Você pode pedir ajuda a bash para responder a essas perguntas usando set -x . Este sinalizador diz ao bash para exibir o comando e seus argumentos expandidos antes de executá-lo:
Primeiro, alguma configuração:
$ a=some-value
$ b=some-other-value
$ set -x
Agora vamos ver como o shell interpreta esses comandos:
$ a=b
+ a=b
O valor da variável a está sendo definido para a string literal "b".
Agora vamos tentar $b :
$ a=$b
+ a=some-other-value
Aqui dizemos ao shell para avaliar $b e inserir o valor de b no comando.
Isso mostra um pouco do valor do shell - ele interpreta variáveis e curingas em vez de fazer com que comandos individuais executem o trabalho. Por exemplo, ls não precisa saber como interpretar "* .txt" porque o shell faz o trabalho antes de ls ser iniciado:
$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt b.txt c.txt