Neste caso o que esta ocorrendo é o seguinte, você não esta usando o conteúdo da variável.
Um outro exemplo mais elaborado.
Suponhamos que você precisa dar um ping em um determinado host, esse host será enviado por parâmetro para seu programa. Porém, caso nenhum host tenha sido definido, o ping será enviado para o um servidor de dns.
Com os requisitos em mãos, vamos à prática:
$ cat meuping.sh
#!/bin/bash
host=$1
[ -z "$host" ] && host="8.8.8.8"
ping -c 5 ${host}
Execução:
$ ./meuping.sh
ou
$ ./meuping.sh [ IP destino ]
No script acima tivemos que validar se a variável $host tem tamanho zero e caso possível setar o ip default (8.8.8.8).
Com a expansão de variáveis você economiza tempo, dinheiro e escrita de código kkkkkk. Veja abaixo.
$ cat meuping2.sh
#!/bin/bash
host=$1
ping -c 5 ${host:=8.8.8.8}
Execução:
$ ./meuping2.sh
ou
$ ./meuping2.sh [ IP destino ]
Como pode ver o resultado é o mesmo, mas economizamos nas validações, que é o que mais leva tempo
de codificação.
Ficou mais claro?