O texto entre os backticks é executado e substituído pela saída do comando (menos os caracteres de nova linha à direita, e tenha cuidado com o comportamento dos shell quando há caracteres NUL na saída). Isso é chamado de substituição de comando porque é substituído pela saída do comando. Então, se você quiser imprimir 5, você não pode usar backticks, você pode usar aspas, como echo "$b"
ou simplesmente soltar 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 há tal comando, ele falha com a mensagem de erro.
Para entender como os backticks funcionam, tente executar isso:
$ A='cat /etc/passwd | head -n1'
$ echo "$A"
cat /etc/passwd |head -n1
deve imprimir a primeira linha do arquivo /etc/passwd
. Mas como usamos backticks, isso não é impresso no console. Em vez disso, ele é armazenado na variável A
. Você pode echo $A
para isso. Note que a maneira mais eficiente de imprimir a primeira linha é usar o comando head -n1 /etc/passwd
, mas eu queria salientar 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 por bash para A="root:x:0:0:root:/root:/bin/bash"
.
Observe que essa sintaxe é do shell Bourne. Citar e fugir torna-se rapidamente um pesadelo, especialmente quando você começa a aninhá-los. O Ksh apresentou a alternativa $(...)
, que agora é padronizada ( POSIX ) e é apoiada por todos shells (até mesmo o shell Bourne do Unix v9). Portanto, você deve usar $(...)
em vez de ser necessário portá-lo para cascas Bourne muito antigas.
Observe também que a saída de '...'
e $(...)
está sujeita à divisão de palavras e geração de nome de arquivo, assim como expansão de variável (em zsh, somente divisão de palavras), geralmente precisaria ser citada em contextos de lista. p>