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 $b
contém 5, ao usar backticks bash
está tentando executar o comando 5
e, 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 -n1
deve imprimir a primeira linha do /etc/passwd
arquivo. Mas como usamos backticks, isso não é impresso no console. Em vez disso, é armazenado na A
variável Você pode ecoar $A
para isso. Observe que a maneira mais eficiente de imprimir a primeira linha está usando o comando, head -n1 /etc/passwd
mas 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.