Hay dos significados diferentes de "obsoleto".
ser obsoleto: (principalmente de una función de software) ser utilizable pero considerado obsoleto y mejor evitarlo, generalmente debido a que ha sido reemplazado.
—Nuevo diccionario Oxford de América
Por esta definición, los backticks están en desuso.
El estado en desuso también puede indicar que la función se eliminará en el futuro.
- Wikipedia
Según esta definición, los backticks no están en desuso.
Aún compatible:
Citando la especificación de grupo abierto en los idiomas de comando de Shell , específicamente en la sección "2.6.3 Sustitución de comando", se puede ver que ambas formas de sustitución de comando, backticks ( `..cmd..`
) o dólar parens ( $(..cmd..)
) todavía son compatibles en la medida en que la especificación avanza.
extracto
La sustitución de comandos permite sustituir la salida de un comando en lugar del nombre del comando en sí. La sustitución del comando ocurrirá cuando el comando esté encerrado de la siguiente manera:
$(command)
or (backquoted version):
`command`
El shell expandirá la sustitución del comando ejecutando el comando en un entorno de subshell (consulte Entorno de ejecución de Shell) y reemplazando la sustitución del comando (el texto del comando más el $()
cierre o las comillas) con la salida estándar del comando, eliminando secuencias de uno o más <línea nueva> caracteres al final de la sustitución. Los caracteres <nueva línea> incrustados antes del final de la salida no se eliminarán; sin embargo, pueden tratarse como delimitadores de campo y eliminarse durante la división de campo, según el valor de IFS y las cotizaciones vigentes. Si la salida contiene bytes nulos, el comportamiento no se especifica.
Dentro del estilo de sustitución de comando entre comillas, <backslash> mantendrá su significado literal, excepto cuando sea seguido por: '$', ' \`
' o <backslash> . La búsqueda de la cita inversa coincidente deberá ser satisfecha por la primera cita inversa no escapada sin comillas; durante esta búsqueda, si se encuentra una comilla inversa no escapada dentro de un comentario de shell, un documento aquí, una sustitución de comando incrustada del $(command)
formulario o una cadena entre comillas, se producen resultados indefinidos. Una cadena entre comillas simples o dobles que comienza, pero no termina, dentro de la `...`
secuencia " " produce resultados indefinidos.
Con el $(command)
formulario, todos los caracteres que siguen el paréntesis abierto al paréntesis de cierre coincidente constituyen el comando. Se puede usar cualquier script de shell válido para el comando, excepto un script que consista únicamente en redirecciones que produzca resultados no especificados.
Entonces, ¿por qué todos dicen que los backticks han quedado en desuso?
Debido a que la mayoría de los casos de uso deberían estar haciendo uso de la forma de parens en dólares en lugar de backticks. (Desaprobado en el primer sentido anterior.) Muchos de los sitios más acreditados (incluido U&L) a menudo también lo afirman, por lo que es un buen consejo. Este consejo no debe confundirse con un plan inexistente para eliminar el soporte para backticks de los depósitos.
BashFAQ # 082 - ¿Por qué se prefiere $ (...) sobre `` `(backticks)?
extracto
`...`
es la sintaxis heredada requerida solo por las capas de bourne más antiguas no compatibles con POSIX. Hay varias razones para preferir siempre la $(...)
sintaxis:
...
Bash Hackers Wiki - Sintaxis obsoleta y obsoleta
extracto
Esta es la forma más antigua compatible con Bourne de la sustitución de comandos . POSIX especifica tanto la sintaxis `COMMANDS`
como la $(COMMANDS)
sintaxis, pero esta última es muy preferida, aunque lamentablemente la primera sigue siendo muy frecuente en los scripts. Las sustituciones de comandos de nuevo estilo son ampliamente implementadas por cada shell moderno (y luego algunos). La única razón para usar backticks es la compatibilidad con un shell Bourne real (como Heirloom). Las sustituciones de comandos de retroceso requieren un escape especial cuando se anidan, y los ejemplos que se encuentran en la naturaleza se citan incorrectamente la mayoría de las veces. Ver:
¿Por qué se prefiere $ (...) sobre `` `(backticks)? .
Fundamento estándar POSIX
extracto
Debido a estos comportamientos inconsistentes, la variedad de sustitución de comandos entre comillas no se recomienda para nuevas aplicaciones que anidan sustituciones de comandos o intenten incrustar scripts complejos.
NOTA: Este tercer extracto (arriba) muestra varias situaciones en las que los backticks simplemente no funcionan, pero el nuevo método parens en dólares sí, comenzando con el siguiente párrafo:
Además, la sintaxis entre comillas tiene restricciones históricas sobre el contenido del comando incrustado. Mientras que el nuevo formulario "$ ()" puede procesar cualquier tipo de secuencia de comandos incrustada válida, la forma de comillas invertidas no puede manejar algunas secuencias de comandos válidas que incluyen comillas inversas.
Si continúa leyendo esa sección, las fallas se resaltan y muestran cómo fallarían usando backticks, pero trabaje usando la nueva notación de parens en dólares.
Conclusiones
Por lo tanto, es preferible que use parens en dólares en lugar de backticks, pero en realidad no está usando algo que ha sido técnicamente "desaprobado" como en "esto dejará de funcionar por completo en algún punto planificado".
Después de leer todo esto, debe tener la idea de que le recomendamos encarecidamente que use parens en dólares a menos que requiera específicamente compatibilidad con un shell Bourne original que no sea POSIX.
cd
a un directorio para ver un ejemplo de por qué la$(...)
notación es más fácil de usar que las comillas invertidas anidadas.