2011-12-29 17 views
19

Tengo que ejecutar comandos, en un script bash, y dentro de este script bash tengo que ejecutar otros comandos. Estoy ejecutando CentOS.bash para el comando en línea

He encontrado 2 maneras de hacer esto en los blogs y manuales:

1) usando las garrapatas o carbón acento

command `sub command` 

o

2) utilizando el signo de dólar y paréntesis

command $(sub command) 

¿Cuál es la diferencia entre los 2 y cuál es preferible usar?

Respuesta

34

No hay diferencia excepto en "encajamiento":

El $() es encajable:

$ echo $(echo "hi" $(echo "there")) 

mientras que el `` no lo es.

+2

Técnicamente se pueden anidar, pero tiene que ser escapado una vez más por cada nivel, y como tal es imposible de mantener * * * y * fea. – l0b0

1

$(...) y backticks son muy similares. La única diferencia entre los dos es algunos detalles de qué caracteres especiales se sustituyen en ellos; el manual explica mejor que yo:

Cuando se utiliza la forma antigua de contrafigura de sustitución, la barra invertida conserva su significado literal, excepto cuando es seguida por $, `, o. La primera comilla inversa no precedida por una barra inclinada finaliza la sustitución del comando. Al usar el formulario $ (comando), todos los caracteres entre paréntesis componen el comando; ninguno es tratado especialmente.

Esto hace que sea un poco más fácil anidar $(...), por ejemplo. Además de eso, sin embargo, no hay diferencia.

1

Citando http://tldp.org/LDP/abs/html/commandsub.html:

  1. La forma $ (...) de sustitución de comandos trata a una doble barra inclinada de una manera diferente que `...`.
  2. Los $ (...) forma de permisos de sustitución de comandos de anidación

Espero que esto ayude!

3

Otros han señalado la diferencia en la sintaxis (básicamente, $() es un poco más limpio anidación WRT y escapa), pero nadie ha mencionado lo que considero la diferencia más importante: $() es mucho más fácil de leer. No se parece a las comillas simples (que significan algo totalmente diferente), y los delimitadores de apertura y cierre son diferentes, por lo que es más fácil distinguir visualmente sus contenidos.

Para sus propios scripts, esto puede no ser realmente crítico; la legibilidad del código es buena, pero la funcionalidad es más importante. Pero para cualquiera que escriba tutoriales, código de muestra, respuestas de stackoverflow, etc., la legibilidad es mucho más importante. La gente escribe comillas simples en lugar de comillas invertidas al escribir ejemplos, etc., y luego se confunde cuando no funciona como se esperaba.

Así que para todos los ejemplos escribir sobre stackoverflow: por favor, guarde sus lectores algunos problemas, y utilizar siempre la forma $().

0

estoy de acuerdo con Gordon en el hecho de que $() es la manera más limpia. Luché durante 2 horas editando mi .bash_profile para agregar la finalización de homebrew bash solo para descubrir que debería haber estado usando `y no '.

Cuestiones relacionadas