traduccion - Backticks vs llaves en Bash
bash ubuntu (2)
Cuando fui a responder esta pregunta , iba a usar la notación ${}
, como he visto tantas veces aquí, que es preferible a backticks.
Sin embargo, cuando lo intenté
joulesFinal=${echo $joules2 /* $cpu | bc}
Recibí el mensaje
-bash: ${echo $joules * $cpu | bc}: bad substitution
pero
joulesFinal=`echo $joules2 /* $cpu | bc`
funciona bien. Entonces, ¿qué otros cambios necesito hacer?
El ``
se llama Sustitución de comandos y es equivalente a $()
(paréntesis), mientras que usted está usando ${}
(llaves).
Así que estos son iguales y significan "interpretar el comando colocado dentro":
joulesFinal=`echo $joules2 /* $cpu | bc`
joulesFinal=$(echo $joules2 /* $cpu | bc)
^ ^
( instead of { ) instead of }
Mientras que las expresiones ${}
se utilizan para la sustitución de variables.
De man bash
:
La sustitución de comandos permite que la salida de un comando reemplace el nombre del comando. Hay dos formas:
$(command) or `command`
Además, ``
son más difíciles de manejar, no puedes anidarlos, por ejemplo. Vea los comentarios a continuación y también ¿Por qué se prefiere $ (...) en lugar de ...
(backticks)? .
Se comportan de manera ligeramente diferente en casos específicos:
$ echo "`echo /"test/" `"
test
$ echo "$(echo /"test/" )"
"test"
Así que Backticks elimina silenciosamente las comillas dobles.