He visto este comentario muchas veces en Unix y Linux, así como en otros sitios que usan la frase "los acentos graves han quedado en desuso", con respecto a shells como Bash y Zsh.
¿Esta afirmación es verdadera o falsa?
Respuesta aceptada:
Hay dos significados diferentes de "obsoleto".
estar obsoleto: (principalmente de una función de software) ser utilizable pero considerado como obsoleto y es mejor evitarlo, generalmente debido a que ha sido reemplazado.
—Nuevo diccionario americano de Oxford
Según esta definición, los acentos graves son en desuso.
El estado obsoleto también puede indica que la función se eliminará en el futuro.
—Wikipedia
Según esta definición, los acentos graves no en desuso.
Aún compatible:
Citando la Especificación de grupo abierto sobre lenguajes de comandos de Shell,
específicamente la sección "2.6.3 Sustitución de comandos", se puede ver que ambas formas de sustitución de comandos, acentos graves (`..cmd..`
) o paréntesis en dólares ($(..cmd..)
) siguen siendo compatibles en la medida en que se especifica.
extracto
La sustitución de comandos permite sustituir la salida de un comando en lugar del propio nombre del comando. La sustitución de comandos se producirá cuando el comando
se incluya de la siguiente manera:
$(command)
or (backquoted version):
`command`
El shell ampliará la sustitución del comando ejecutando el comando en un entorno de subshell
(consulte Entorno de ejecución del shell) y reemplazando la sustitución del comando
(el texto del comando más el $()
o
comillas inversas) con la salida estándar del comando, eliminando secuencias de uno
o más caracteres de
pueden tratarse como delimitadores de campo y eliminarse durante la división de campos,
según el valor de IFS y cotización que esté vigente. Si la salida
contiene bytes nulos, el comportamiento no se especifica.
Dentro del estilo de comillas inversas de sustitución de comandos,
su significado literal, excepto cuando vaya seguido de:‘$’, ‘`
', o
búsqueda de la comilla inversa coincidente se satisfará con la primera comilla inversa sin escape
sin comillas; durante esta búsqueda, si se encuentra una comilla inversa sin escape
dentro de un comentario de shell, un documento aquí, un comando incrustado
sustitución 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 $(comando)
formulario, todos los caracteres que siguen al paréntesis de apertura hasta
el paréntesis de cierre correspondiente constituyen el comando. Se puede usar cualquier secuencia de comandos de shell
válida para el comando, excepto una secuencia de comandos que consta únicamente de
redirecciones que producen resultados no especificados.
Entonces, ¿por qué todo el mundo dice que los acentos graves han quedado obsoletos?
Porque la mayoría de los casos de uso deberían estar haciendo uso de la forma parens dólar en lugar de acentos graves. (Obsoleto en el primer sentido anterior). Muchos de los sitios de mayor reputación (incluido U&L) a menudo también afirman esto, por lo que es un buen consejo. Este consejo no debe confundirse con algún plan inexistente para eliminar la compatibilidad con los acentos graves de las conchas.
-
BashFAQ #082 – ¿Por qué se prefiere $(…) a `…` (comillas invertidas)?
extracto
`...`
es la sintaxis heredada requerida solo por el más antiguo de
bourne-shells no compatibles con POSIX. Hay varias razones para
preferir siempre el$(...)
sintaxis:…
-
Bash Hackers Wiki:sintaxis obsoleta y en desuso
extracto
Esta es la forma más antigua compatible con Bourne de la sustitución de comandos.
Tanto el`COMMANDS`
y$(COMANDOS)
las sintaxis están especificadas por POSIX,
pero este último es muy preferido, aunque el primero es desafortunadamente
todavía muy frecuente en las secuencias de comandos. Las sustituciones de comandos de nuevo estilo son ampliamente
implementadas por cada shell moderno (y algo más). La única razón para usar
acentos graves es la compatibilidad con un shell Bourne real (como Heirloom).
Las sustituciones de comandos de acento grave requieren un escape especial cuando están anidados, y
los ejemplos que se encuentran en la naturaleza se citan incorrectamente más a menudo que no. Ver:¿Por qué se prefiere $(…) a `…` (comillas invertidas)?. -
Justificación del estándar POSIX
extracto
Debido a estos comportamientos incoherentes, no se recomienda la variedad de sustitución de comandos con comillas inversas para aplicaciones nuevas que anidan sustituciones de comandos o intentan incrustar secuencias de comandos complejas.
Además, la sintaxis de comillas inversas tiene restricciones históricas sobre el contenido del comando incrustado. Mientras que el formulario "$()" más reciente puede procesar cualquier tipo de secuencia de comandos incrustada válida, el formulario de comillas inversas no puede manejar algunos scripts válidos que incluyen comillas inversas.
Si continúa leyendo esa sección, las fallas se resaltan y muestran cómo fallarían usando acentos graves, pero funcionan usando la nueva notación de paréntesis en dólares.
Relacionado:¿Cómo colocar la mano para presionar las teclas Comando (cmd) + Opción (alt)?Conclusiones
Por lo tanto, es preferible que use paréntesis de dólar en lugar de acentos graves, pero en realidad no está usando algo que técnicamente ha sido "obsoleto" como "esto dejará de funcionar por completo en algún punto planificado".
Después de leer todo esto, debe saber que se le recomienda enfáticamente usar paréntesis en dólares a menos que específicamente requieren compatibilidad con un shell Bourne original real que no sea POSIX.