O texto entre backticks é executado e substituído pela saída do comando (menos os caracteres de nova linha à direita e lembre-se de que o comportamento do shell varia quando há caracteres NUL na saída). Isso é chamado substituição de comando porque é substituído pela saída do comando. Portanto, se você deseja imprimir 5, não pode usar reticulares, pode usar aspas, como echo "$b"ou simplesmente largar qualquer cotação e usar echo $b.
Como você pode ver, como $bcontém 5, ao usar backticks bashestá tentando executar o comando 5e, como não existe, ele falha com a mensagem de erro.
Para entender como os backticks funcionam, tente executar o seguinte:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1deve imprimir a primeira linha do /etc/passwdarquivo. Mas como usamos backticks, isso não é impresso no console. Em vez disso, é armazenado na Avariável Você pode ecoar $Apara isso. Observe que a maneira mais eficiente de imprimir a primeira linha está usando o comando, head -n1 /etc/passwdmas eu queria ressaltar que a expressão dentro dos backticks não precisa ser simples.
Portanto, se a primeira linha de / etc / passwd for root:x:0:0:root:/root:/bin/bash, o primeiro comando será substituído dinamicamente pelo bash para A="root:x:0:0:root:/root:/bin/bash".
Observe que essa sintaxe é do shell Bourne. Citar e escapar torna-se rapidamente um pesadelo, especialmente quando você os aninha. O Ksh apresentou a $(...)alternativa que agora é padronizada ( POSIX ) e suportada por todos os shells (mesmo o shell Bourne do Unix v9). Portanto, você deve usá-lo $(...)hoje em dia, a menos que precise ser portátil para cascas Bourne muito antigas.
Observe também que a saída `...`e $(...)está sujeita à divisão de palavras e geração de nome de arquivo, assim como a expansão variável (em zsh, somente divisão de palavras), portanto, geralmente, elas precisam ser citadas em contextos de lista.