El texto entre comillas invertidas se ejecuta y se reemplaza por la salida del comando (menos los caracteres de línea nueva finales, y tenga en cuenta que los comportamientos de shell varían cuando hay caracteres NUL en la salida). Eso se llama sustitución de comando porque se sustituye con la salida del comando. Entonces, si desea imprimir 5, no puede usar comillas invertidas, puede usar comillas, como echo "$b"o simplemente dejar cualquier cita y usar echo $b.
Como puede ver, dado que $bcontiene 5, cuando usa backticks bashestá intentando ejecutar el comando 5y dado que no existe dicho comando, falla con el mensaje de error.
Para entender cómo funcionan los backticks, intente ejecutar esto:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1debería imprimir la primera línea del /etc/passwdarchivo. Pero como usamos backticks, no imprime esto en la consola. En cambio, se almacena en Avariable. Puedes hacer eco $Ade esto. Tenga en cuenta que una forma más eficiente de imprimir la primera línea es mediante el comando, head -n1 /etc/passwdpero quería señalar que la expresión dentro de los backticks no tiene que ser simple.
Entonces, si la primera línea de / etc / passwd es root:x:0:0:root:/root:/bin/bash, el primer comando será sustituido dinámicamente por bash to A="root:x:0:0:root:/root:/bin/bash".
Tenga en cuenta que esta sintaxis es del shell Bourne. Citar y escapar se convierte rápidamente en una pesadilla, especialmente cuando comienzas a anidarlos. Ksh introdujo la $(...)alternativa que ahora está estandarizada ( POSIX ) y es compatible con todos los shells (incluso el shell Bourne de Unix v9). Por lo tanto, debe usar $(...)en su lugar hoy en día a menos que necesite ser portátil para conchas Bourne muy antiguas.
También tenga en cuenta que la salida de `...`y $(...)está sujeta a la división de palabras y la generación de nombre de archivo al igual que la expansión de variables (en zsh, división de palabras solamente), por lo que generalmente debería citarse en contextos de lista.