Hay dos sintaxis para la sustitución de comandos: con paréntesis en dólares y con comillas invertidas. Ejecutando top -p $(pidof init)y top -p `pidof init`da la misma salida. ¿Son estas dos formas de hacer lo mismo o hay diferencias?
shell
command-line
command-substitution
tshepang
fuente
fuente

Respuestas:
Las comillas inversas de estilo antiguo
` `tratan las barras diagonales inversas y la anidación un poco diferente. El nuevo estilo$()interpreta todo en el medio( )como un comando.funciona si se escapan las comillas inversas anidadas:
diversión de barra invertida:
El nuevo estilo se
$()aplica a todos los shells conformes con POSIX .Como señaló Mouviciel , el estilo antiguo
` `podría ser necesario para las conchas más antiguas.Además del punto de vista técnico, el estilo antiguo
` `también tiene una desventaja visual:I like $(program) better than `program`'`'`''`''`'`''`'(y SE lo usa
` `para su propio propósito, fue un dolor escribir esta respuesta :)fuente
{ }generalmente se llama "llaves" o "llaves" en.wikipedia.org/wiki/Braces_(punctuation)#Braces`es una tecla muerta, por lo que tengo que escribir un doble retroceso (algo que generalmente olvido que incluso puedo hacer) o retroceder y luego el espacio, que es un dolor.La diferencia obvia que observo es que no puedes anidar backticks mientras puedes anidar
$(). Tal vez ambos existan por razones heredadas. Del mismo modo, los comandos.ysourceson sinónimos.fuente
source. Dash es un ejemplo.$(...)y`...`son estándar (este último está en desuso) mientras que.es estándar pero nosource(t)cshno se pueden anidar. aunque(t)cshno lo soportes$(...). Sin embargo, sí admitensource(y no.).$()no funciona con el viejo shell Bourne. Pero han pasadoañosdesde que trabajé con el viejo shell Bourne.fuente
Otra nota,
$()usará más recursos del sistema que usar backticks, pero es un poco más rápido.En Mastering Unix shell scripting , Randal K. Michael había hecho una prueba en un capítulo llamado "24 formas de procesar un archivo línea por línea".
fuente
$()hace que su script sea un byte más grande que si se usara`(suponiendo que no los anide y no use barras invertidas dentro). En cuanto a cuál sería más rápido de analizar, eso variaría entre los proyectiles y sería irrelevante, ya que sería insignificante en comparación con el costo de crear una tubería y un proceso de bifurcación que implica la sustitución del comando.Para agregar a lo que otros dijeron aquí, puede usar los backticks para simular comentarios en línea:
La salida es:
foo bar.Consulte lo siguiente para obtener más información: https://stackoverflow.com/a/12797512 (Tenga en cuenta también los comentarios debajo de esa publicación).
fuente
La
$()sintaxis no funcionará con el viejo shell bourne.Con shells más nuevos
` `y$()equivalentes, pero$()es mucho más conveniente de usar cuando necesita anidar múltiples comandos.Por ejemplo :
es más fácil de escribir y depurar que:
fuente