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 ?



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.


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.


Los backticks ni siquiera se pueden anidar funcionalmente.
Bernhard

@Bernhard Mi ejemplo muestra lo que tenía en mente con esa declaración.
Aaron
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.