Usando backticks o dollar en scripts de shell

9

Estoy ocupado escribiendo script de shell (usando Bash) donde necesito completar alguna variable del resultado devuelto de otro comando.

Así que estoy usando una sintaxis como esta:

VAR=`command 2>/dev/null`

Pero cuando buscaba información sobre shells de script, a menudo descubría que lo anterior se puede lograr utilizando la siguiente sintaxis también:

VAR=$(command 2>/dev/null)

Ambos funcionan para mí (he recibido el resultado esperado en ambos casos) y, por lo tanto, me pregunto si aún puedo usar ambos formularios de manera intercambiable o si tengo que apegarme a uno para asegurarme de cumplir con la evolución futura de cáscara ?

Justin
fuente
Los enlaces de belacqua ofrecen mucha información sobre las diferencias y el uso. Cierre ya que no está relacionado con un problema de Ubuntu, sino más bien de programación. Le recomiendo seguir los enlaces mencionados anteriormente.
Luis Alvarado

Respuestas:

13

Usa dólar. Los backticks son semi-obsoletos , porque son más complicados de usar (vea el enlace), y no tienen ventajas a menos que esté haciendo golf de código y absolutamente necesite guardar un solo personaje. Sin embargo, probablemente no se eliminarán de los proyectiles populares en el corto plazo, por lo que está seguro de usarlos por ahora.

l0b0
fuente
3

Siga con la notación del signo de dólar $()siempre que pueda. Los backticks se vuelven engorrosos / confusos cuando comienzas a necesitar hacer citas anidadas. Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Reemplazar los backticks con $()rendimientos de la misma salida, y es más fácil de leer (menos citas de ángulos variables para discernir):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Eso, y cada comilla (comilla simple, comilla doble, retroceso) significa algo diferente en el shell, por lo que usar $ puede ayudar a eliminar un nivel de complejidad. Y el desarrollador que te sigue te lo agradecerá, porque le será más fácil descubrir lo que hiciste.

Aaron
fuente
Los backticks ni siquiera se pueden anidar funcionalmente.
Bernhard
@Bernhard Mi ejemplo muestra lo que tenía en mente con esa declaración.
Aaron