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 $b
contiene 5, cuando usa backticks bash
está intentando ejecutar el comando 5
y 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 -n1
debería imprimir la primera línea del /etc/passwd
archivo. Pero como usamos backticks, no imprime esto en la consola. En cambio, se almacena en A
variable. Puedes hacer eco $A
de esto. Tenga en cuenta que una forma más eficiente de imprimir la primera línea es mediante el comando, head -n1 /etc/passwd
pero 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.