tutorial traduccion script comandos bash

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.